首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大多数发生在连续子字符串-滑动窗口- Python

大多数发生在连续子字符串-滑动窗口- Python
EN

Stack Overflow用户
提问于 2022-10-25 03:23:19
回答 2查看 40关注 0票数 -2

在实践python时,我遇到了滑动窗口技术,但并不完全理解实现。给定一个字符串k和整数N,代码将循环通过,从而将窗口从左向右移动。然而,对窗口元素的捕获以及窗口的增长方式对我来说是模糊的。

这些滑动窗口的问题是相似的,但没有字母方面。

不重复字符的https://leetcode.com/problems/fruit-into-baskets/

大多数连续的子字符串在这里被定义为生长序列中的三个字母。例如,对于输入字符串k 'cdegoxyzcga‘和长度N为3,输出将是cde,xyz。

EN

回答 2

Stack Overflow用户

发布于 2022-10-25 03:52:24

代码语言:javascript
复制
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),因为您只运行了一次循环。

票数 0
EN

Stack Overflow用户

发布于 2022-10-25 04:28:03

您可以使用Counter在字符串上滚动时收集计数:

代码语言:javascript
复制
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'

注意:可能有超过一个“最频繁”的字符串。看到所有的人:

代码语言:javascript
复制
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"作为输入的示例:

代码语言:javascript
复制
['ab', 'dy']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74188813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档