创建一个地图
{letter; int}和
activecount计数器。
让两个指标
left和
right设置他们0。
移动
right索引。
如果
l=s[right]为字母,则为地图键的增量值
l。
如果值变为非零增量
activecount。
继续直到
activecount26
现在移动
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"))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)