Python - N 个重复的 K 字符的非重叠出现
在本文中,我们必须使用 Python 查找 N 个重复的 K 字符的非重叠出现。在 Python 中使用字符串时,这类问题非常常见。
理解问题
当前的问题是查找 N 个重复的 K 字符的非重叠出现。简单来说,我们将得到一个字符串,该字符串中会有一些重复的字符,因此我们必须找出特定字符的出现并显示其计数。这里 N 是给定输入字符串中的任何字符,K 是字符 N 的计数。
上述问题的逻辑
为了解决这个问题,我们将使用循环遍历给定的字符串,然后我们将检查 N 和 K 的值。并检查具有 N、K 次的子字符串。并使用一个对象来存储这些出现的次数。
算法
步骤 1 − 首先定义一个名为 non_overlapping() 的函数,在这个函数中我们将传递三个参数,即 n、k 和 the_str。这里 n 是字符,k 是 n 的字符数,the_str 是输入字符串
步骤 2 − 启动一个名为 result 的变量,该变量将用于跟踪非重叠出现的次数。
步骤 3 − 接下来,我们将借助分隔符"B"拆分给定的字符串 the_str。这将创建一个子字符串列表。
步骤 4 - 将对列表中的每个子字符串启动一个循环。
步骤 5 - 对于每个子字符串,我们将使用 lambda 函数内的 filter 函数过滤掉字符 N 的出现次数。这里将使用 lambda 函数来检查每个字符是否等于 K。
步骤 6 - 现在将过滤后的结果转换为列表,然后计算长度。
步骤 7 - 然后我们将长度除以 K 以检查当前子字符串中不重叠出现的次数。
步骤 8 - 之后将 count 的值添加到 result 变量中。
步骤 9 - 当迭代过程结束时,最终不重叠出现的次数将保存在 result 变量中。
示例
# 定义函数 def non_overlapping(n, k, the_str): # 初始化结果object result = 0 # 遍历字符串 for sub in the_str.split('B'): result += len(list(filter(lambda x: x == k, sub))) // n return result the_str = 'AABBCCDDAABBGGHH' K = "A" N = 2 print("输入字符串是:" + str(the_str)) Output = non_overlapping(N, K, the_str) print("非重叠出现结果:" + str(Output))
输出
输入字符串是:AABBCCDDAABBGGHH 非重叠出现结果:2
复杂度
查找 N 重复 K 字符的非重叠出现的时间复杂度为 O(m),这里 m 是给定输入字符串的长度。对于每次迭代,我们都会过滤掉字符 A 的出现次数,并计算 A 出现的次数 K = 2 次。
结论
我们已经使用 Python 实现了查找 N 重复 K 字符的非重叠出现的解决方案。我们用一种非常直接的方法来解决这个问题,时间复杂度为 O(m)。