在实践python时,我遇到了滑动窗口技术,但并不完全理解实现。给定一个字符串k和整数N,代码将循环通过,从而将窗口从左向右移动。然而,对窗口元素的捕获以及窗口的增长方式对我来说是模糊的。
这些滑动窗口的问题是相似的,但没有字母方面。
不重复字符的https://leetcode.com/problems/fruit-into-baskets/
大多数连续的子字符串在这里被定义为生长序列中的三个字母。例如,对于输入字符串k 'cdegoxyzcga‘和长度N为3,输出将是cde,xyz。
发布于 2022-10-25 03:52:24
result = {}
input = 2;
inputString = "abrtidyzabfo"
for i in range(0, len(inputString)):
if i >= input-1:
current = inputString[i+1-input: i+1]
if current in result:
result[current] = result[current] + 1
else:
result[current] = 1
print(result)您可以使用字典来跟踪出现或不出现的特定子字符串。这种方法被称为“滑动窗口算法”。此时,复杂度将为O(n),因为您只运行了一次循环。
发布于 2022-10-25 04:28:03
您可以使用Counter在字符串上滚动时收集计数:
s = 'abrtidyzabfo'
n = 2
from collections import Counter
c = Counter(s[i:i+n] for i in range (len(s)-n+1))
out = c.most_common(1)[0][0]输出:'ab'
注意:可能有超过一个“最频繁”的字符串。看到所有的人:
c = Counter(s[i:i+n] for i in range (len(s)-n+1))
out = []
MAX = 0
for x, i in c.most_common():
if i > MAX:
out = [x]
MAX = i
elif i == MAX:
out.append(x)
out使用s = "abrtidyzabfody"作为输入的示例:
['ab', 'dy']https://stackoverflow.com/questions/74188813
复制相似问题