沉迷代码,日渐消瘦

论坛 期权论坛 期权     
光荣之路   2019-7-7 21:32   2211   0
新书
速递
吴老的java版《selenium webdriver3 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。
文 | 小怪兽
[h1]光荣之路测试开发培训班招生简章[/h1]吴老师的java版《selenium webdriver3 实战宝典》新鲜出炉,文末链接直达哟!
今天是星期五,天气异常的凉快,下午6点多,想着在摸会鱼就下班了,微信闪了闪,就打开看了一下,是我们python的学习群,这一看不要紧,接下来的一个小时,群里的小伙伴们都围绕着一道题展开了讨论。


高同学:
如果一个字符串可以由某个长度为 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
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:20
帖子:4
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP