zltzlt 发表于 2020-3-3 10:50:21

一个账号 发表于 2020-3-3 10:49
什么意思?

双重 for 循环

一个账号 发表于 2020-3-3 10:52:54

zltzlt 发表于 2020-3-3 10:50
双重 for 循环

我知道你什么意思了

Croper 发表于 2020-3-3 10:59:32

这样在字符串极长时仿佛要快一点点,自己测试长度在100万时大概快30msdef func(sz:str)->bool:
    l=len(sz)
    if (l<2):
      return False
    next=[-1,0]+*l
    p,q=0,1
    while q<l:
      while p!=-1 and (l%(q-p)!=0 or sz!=sz):
            p=next
      if q-p>l/2:
            break
      p+=1
      q+=1
      next=p
      if q==l:
            return True
    return False

whosyourdaddy 发表于 2020-3-3 12:15:43

def func341(str):
    count = len(str)
    i = count
    flag = 0
    while i!= 1:
      i -= 1
      if count%i == 0:
            j = i-1
            while j!=count-1 :
                temp1 = str
                temp2 = str
                if temp1 == temp2:
                  j = j+i
                  if j==count-1:
                        flag = 1
                  continue
                else:
                  break
      if flag == 1:
            return True
      else:
             continue
    return False

fnezdu 发表于 2020-3-3 12:52:23

新手报到,请多关照!{:9_241:}

黎影 发表于 2020-3-3 13:52:43

wuqramy 发表于 2020-3-3 09:58
万一你遇到了这样的字符串怎么办:

由abcdefghijklmnopqrstuvwxyz循环组成

用最笨的方法,引用一个文本,按顺序调用数字

wuqramy 发表于 2020-3-3 14:27:00

本帖最后由 wuqramy 于 2020-3-3 14:30 编辑

黎影 发表于 2020-3-3 13:52
用最笨的方法,引用一个文本,按顺序调用数字

那不如直接把number1写上去:
str1 = input('输入:')
number = len(str1)
for a in range(1,(int(number/2))):
      str2 = str1[:a]
      for b in range(0,number,a):
                if str1 != str2:
                        break
      else:
            print('输出:True')
            number1 = int(number/(len(str2)))
            print('解析:可有子字符"%s"重复%s次构成。'%(str2,number1))

黎影 发表于 2020-3-3 15:11:52

wuqramy 发表于 2020-3-3 14:27
那不如直接把number1写上去:

汉字耶

wuqramy 发表于 2020-3-3 15:17:31

黎影 发表于 2020-3-3 15:11
汉字耶

一定要汉字吗

黎影 发表于 2020-3-3 15:57:04

wuqramy 发表于 2020-3-3 15:17
一定要汉字吗

是呀!

wuqramy 发表于 2020-3-3 15:59:43

黎影 发表于 2020-3-3 15:57
是呀!

那很麻烦的!

风魔孤行者 发表于 2020-3-3 16:05:22

虽然把小甲鱼的视频都看完了,但是感觉自己还是只会用 if


string = input('请输入字符串:')

length = len(string)
prime = []
judge = False


if length == 1:
    print('请输入至少2个字符')

elif length ==2:
    if string*2 == string:
      judge = True
else:
    for i in range(2,length):
      if length%i == 0:
            prime.append((i,length/i))


    for n in prime:
      if string[:n] * int(n) == string:
            judge = True
            print(string[:(n)]+',重复次数为'+str(int(n)))


print(str(judge))

蒋博文 发表于 2020-3-3 16:09:50

zltzlt 发表于 2020-3-2 20:48
输入以下数据超时:

我的不超时{:10_256:}{:10_256:}
秒出答案{:10_256:}{:10_256:}
要不要看看?
51楼

zltzlt 发表于 2020-3-3 16:10:29

蒋博文 发表于 2020-3-3 16:09
我的不超时
秒出答案
要不要看看?


没有抄袭吗

蒋博文 发表于 2020-3-3 16:10:44

zltzlt 发表于 2020-3-3 16:10
没有抄袭吗

没有啊

蒋博文 发表于 2020-3-3 16:11:52

zltzlt 发表于 2020-3-3 16:10
没有抄袭吗

51楼

黎影 发表于 2020-3-3 16:13:17

wuqramy 发表于 2020-3-3 15:59
那很麻烦的!

是呀,用文本编辑,然后调用应该比较简单

wuqramy 发表于 2020-3-3 16:24:53

zltzlt 发表于 2020-3-2 20:48
输入以下数据超时:

我的也行得通
n = input('n = ')
if len(n) > 1:
    for i in range(len(n)):
      if n[:i] == n:
            print('True')
            break
    else:
      print('False')
else:
    print('False')

wuqramy 发表于 2020-3-3 16:26:08

黎影 发表于 2020-3-3 16:13
是呀,用文本编辑,然后调用应该比较简单

但是你想想,如果该字符串循环了上万次怎么办

蒋博文 发表于 2020-3-3 16:28:04

zltzlt 发表于 2020-3-2 20:48
输入以下数据超时:

我的可以:
def fun341(s):
    n = len(s)
    for i in range(1,n//2+1):
      if n%i == 0:
            tar = s[:i]
            j = i
            while j < n and s == tar:
                j+=i
            if j == n:
                return True
    return False
页: 1 2 3 4 [5] 6 7 8 9
查看完整版本: Python:每日一题 341