鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 341

[复制链接]
 楼主| 发表于 2020-3-3 10:50:21 | 显示全部楼层

双重 for 循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:52:54 | 显示全部楼层

我知道你什么意思了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 10:59:32 | 显示全部楼层
这样在字符串极长时仿佛要快一点点,自己测试长度在100万时大概快30ms
def func(sz:str)->bool:
    l=len(sz)
    if (l<2):
        return False
    next=[-1,0]+[0]*l
    p,q=0,1
    while q<l:
        while p!=-1 and (l%(q-p)!=0 or sz[q]!=sz[p]):
            p=next[p]
        if q-p>l/2:
            break
        p+=1
        q+=1
        next[q]=p
        if q==l:
            return True
    return False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[j-i+1:j+1]
                temp2 = str[j+1:j+i+1]
                if temp1 == temp2:
                    j = j+i
                    if j==count-1:
                        flag = 1
                    continue
                else:
                    break
        if flag == 1:
            return True
        else:
             continue
    return False

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 12:52:23 | 显示全部楼层
新手报到,请多关照!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 13:52:43 | 显示全部楼层
wuqramy 发表于 2020-3-3 09:58
万一你遇到了这样的字符串怎么办:

由abcdefghijklmnopqrstuvwxyz循环组成

用最笨的方法,引用一个文本,按顺序调用数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[b:b+a] != str2:
                        break
        else:
            print('输出:True')
            number1 = int(number/(len(str2)))
            print('解析:可有子字符"%s"重复%s次构成。'%(str2,number1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 15:11:52 | 显示全部楼层
wuqramy 发表于 2020-3-3 14:27
那不如直接把number1写上去:

汉字耶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 15:17:31 | 显示全部楼层

一定要汉字吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 15:57:04 | 显示全部楼层

是呀!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 15:59:43 | 显示全部楼层

那很麻烦的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0]*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[0]] * int(n[1]) == string:
            judge = True
            print(string[:(n[0])]+',重复次数为'+str(int(n[1])))


print(str(judge))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 16:09:50 | 显示全部楼层
zltzlt 发表于 2020-3-2 20:48
输入以下数据超时:

我的不超时
秒出答案
要不要看看?
51楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 16:10:29 | 显示全部楼层
蒋博文 发表于 2020-3-3 16:09
我的不超时
秒出答案
要不要看看?

没有抄袭吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 16:10:44 | 显示全部楼层

没有啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 16:11:52 | 显示全部楼层

51楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 16:13:17 | 显示全部楼层

是呀,用文本编辑,然后调用应该比较简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i:i + i + 1]:
            print('True')
            break
    else:
        print('False')
else:
    print('False')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 16:26:08 | 显示全部楼层
黎影 发表于 2020-3-3 16:13
是呀,用文本编辑,然后调用应该比较简单

但是你想想,如果该字符串循环了上万次怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[j:j+i] == tar:
                j+=i
            if j == n:
                return True
    return False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表