高同学:
如果一个字符串可以由某个长度为 k 的字符串重复多次得到,我们说该串以 k 为周期。
例如,abcabcabcabc 以 3 为周期(注意,它也以 6 和 12 为周期)。输入一个长度不超过 80 的串,输出它的最小周期。样例输入:HoHoHo 样例输出:2 (竞赛题)
我看到了这道题,心里就想着,工作也完成,反正下班还有一个小时,就做道题消磨一下这一个小时。
我仔细阅读起这道题:
一个字符串长度为K
重复N次后得到一个更长的字符串(S)
计算原字符串k的长度,就是最小周期
好了解释完了,我看这道题的时候,脑回路就开始转了。
我的小马达是这样运转的:
既然是有规律重复的,就遍历所有字符
然后按每个字符串split,得到一个列表
然后set得到的列表,如果set后长的长度是1,那么就找到重复的临界点了。
Set后的结果加上这个临界点就得了最后的结果了。
好了,思路有了,咱们开始写吧。
s = 'abcabdabcabd'
n = 0
res = ''
while 1:
l = s.split(s[n])
l = [i for i in l if i != '']
if len(set(l)) == 1:
res = list(set(l))[0] + s[n]# 这有个bug
print(res)
n += 1
if n == len(s):
break
print(res)
print(len(res))
吴老:
import re
s = "abcabcabcabc"
result = ""
max_occurrence_times = 0
for i in range(1,len(s)):
if len(re.findall(s[0]+s[1:i],s)) >= max_occurrence_times:
max_occurrence_times = len(re.findall(s[0]+s[1:i],s))
result = s[0]+s[1:i]
print(result,max_occurrence_times)
擦类!正则都用上了,我想这么不是作弊么(其实是我正则不太熟练。。。
)。
不过,题目也没有说不能用正则呀。还没有来得及好好看看正则的解法,何同学就发出了自己的答案。 何同学:
s='abcaabcddabcaabcddabcaabcddabcaabcddabcaabcddabcaabcddabcaabcddabcaabcddabcaabcddabcaabcddabcaabcdd'
def find_min_k(s):
queue = s[0]
i= 1
while i