什么是此代码而不是double for循环(python)的更快版本?

什么是此代码而不是double for循环(python)的更快版本?,第1张

什么是此代码而不是double for循环(python)的更快版本?

创建一个地图

{letter; int}
activecount
计数器。
让两个指标
left
right
设置他们0。

移动

right
索引
如果
l=s[right]
字母,则为地图键的增量值
l

如果值变为非零增量
activecount

继续直到
activecount
26

现在移动

left
索引。
如果
l=s[left]
为字母,则将地图键的值减小
l

如果值变为零-递减
activecount
并停止。

重新开始移动

right
索引,依此类推。

之间的差异很小

left
,并
right
同时
activecount==26
在最短的全字母短句对应。

算法是线性的。

字符串示例代码,仅包含字母“ abcd”的小写字母。返回包含来自的所有字母的最短子字符串的长度

abcd
。不检查有效字符,没有经过全面测试。

import stringdef findpangram(s):    alfabet = list(string.ascii_lowercase)    map = dict(zip(alfabet, [0]*len(alfabet)))    left = 0    right = 0    ac = 0    minlen = 100000    while left < len(s):        while right < len(s): l = s[right] c = map[l] map[l] = c + 1 right += 1 if c==0:     ac+=1     if ac == 4:         break        if ac < 4: break        if right - left < minlen: minlen = right - left        while left < right: l = s[left] c = map[l] map[l] = c - 1 left += 1 if c==1:     ac-=1     break        if right - left + 2 < minlen: minlen = right - left + 1    return minlenprint(findpangram("acacdbcca"))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5643356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存