我遇到的问题是改变所有" o"与" ko"和" k"用" ok"从" ok"开始1000次,然后计算有多少连续的o。一旦达到两位数,代码就会显着减慢,我不确定如何重构我的代码。
import string
y ="ok"
z = ""
for c in range(1000):
for x in y:
if str(x) == "o":
x = x.replace("o", "ko")
z += x
else:
x = x.replace("k", "ok")
z += x
y = z
z = ""
print(y,c)
y = y.replace("k", " ")
y = y.count("oo")
print (y)
来源问题
在向朋友咆哮后,基思收到一封信,上面写着一封信:" K"。在这种低调的反应中,他回答了他的朋友回复的#34; OK"" KOOK。"作为一个精明的人,基思确定了他的朋友发起的模式:随后的消息包括基思和他的朋友替换每个" K"用" OK"和" O"与" KO"。帮助Keith在1000回复的消息中找到长度为2或更大的连续Os的集合数。第一条消息" K",不算作回复。给你的答案mod 10 ^ 9 + 7。
澄清什么构成"长度为2或更长的连续Os的集合": KOKOOKOOOKOOOO - 在这个字符串中有三组长度为2或更大的连续K(" OO"," OOO"," OOOO")。
答案 0 :(得分:2)
这里的主要问题是每个步骤的字母数量加倍 - 例如,在第40步中,有2 ^ 40个字母。如果每个字母占用一个字节,那就是大约几字节的字母。当然,与存储所有1000个步骤所需的空间相比,这只是一小部分。所以,不,粗暴地强迫这样的问题是不可行的。
相反,目标可能是认识到模式是Thue-Morse sequence,除非有时翻转。 '○'和' k'对应于0或1,它并不特别重要。您可以搜索维基百科页面,以查找序列中连续“1”的最大数量。
答案 1 :(得分:-1)
y ="ok"
for c in range(1000):
y = y.replace('o','ko')
y = y.replace('k','ok')
print(y,c)
你可能不必在循环中搜索' o'和' k'替换会为你做,仍然需要很长时间。