栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是此代码而不是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"))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号