jdzzj 发表于 2020-3-2 22:34:18

def fun341(s):
    len_s = len(s)
    min_len = len(set(s))# 子字符串最少应当包含所有的不重复元素
    substr = s[:min_len - 1]
    for i in range(min_len - 1, len(s) // 2 + 1):
      substr += s
      len_sub = len(substr)
      if len_s % len_sub == 0:# 长度匹配的情况下才需要进行判断
            for j in range(2, len_s // len_sub + 1):
                if substr * j == s:
                  return True

    return False

hhb1988 发表于 2020-3-2 22:37:48

def f341(string):
    lenth1 = len(string)
    lenth2 = lenth1 // 2
    for i in range(lenth1//2):
      if lenth1%lenth2 == 0:
            n = lenth1 / lenth2
            if int(n) * string[:lenth2] == string:
                return 1
      lenth2 -=1
            
    return 0



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

if f341(string):
    print("是由一个子串重复多次构成!")
else:
    print("不是由一个子串重复多次构成!")

蒋博文 发表于 2020-3-2 22:40:10

猫记 发表于 2020-3-2 21:50
def f341(s):
    list1 = []
    s_len = len(s)


先点击<>将代码复制到上面点击确定,然后点击纯文本旁边的那个对号就可以了

黎影 发表于 2020-3-2 23:07:33

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)))
                list1 = ('一','二','三','四','五','六','七','八','九','十')
                print('解析:可有子字符“%s”重复%s次构成。'%(str2,list1))

walleeee 发表于 2020-3-3 00:22:06

本帖最后由 walleeee 于 2020-3-3 00:39 编辑

string=input('输入:')

booll= False

for i in range(len(string)-1):
    booll=booll or (string*(len(string)//(i+1))==string)

print(booll)

在东边 发表于 2020-3-3 00:46:37

import re

def func(s):
    pat = re.compile(r"^(+)\1+$")
    return bool(pat.search(s))

Python3005 发表于 2020-3-3 05:31:00

import collections
def fun(s):
        return len(set(collections.Counter(s).values())) == 1

NAMELESSONE 发表于 2020-3-3 09:25:58

import math
def action(s:str):
    def cool(n:int):
      l=[]
      m=2
      if n%2==0:
            m=1
      for i in range(1,int(math.sqrt(n))+1,m):
            if n%i==0:
                l.append(i)
                l.append(n//i)
      l.remove(n)
      return list(set(l))
    nums=cool(len(s))
    for i in nums:
      string=s.split(s[:i])
      if len(set(string))==1 and set(string).pop()=='':
            return True
    return False

wuqramy 发表于 2020-3-3 09:45:52

本帖最后由 wuqramy 于 2020-3-3 09:47 编辑

一个账号 发表于 2020-3-2 20:59
你哪弄来这么大的数据

乱敲键盘 + 无数个Ctrl+v 即可

一个账号 发表于 2020-3-3 09:49:17

黎影 发表于 2020-3-2 23:07
str1 = input('输入:')
number = len(str1)
for a in range(1,(int(number/2))):


不用那么麻烦{:10_277:},直接返回 True 或 False 即可

wuqramy 发表于 2020-3-3 09:58:41

黎影 发表于 2020-3-2 23:07
str1 = input('输入:')
number = len(str1)
for a in range(1,(int(number/2))):


万一你遇到了这样的字符串怎么办:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
由abcdefghijklmnopqrstuvwxyz循环组成{:10_277:}

zltzlt 发表于 2020-3-3 10:09:27

@一个账号 @wuqramy 不要刷屏

wuqramy 发表于 2020-3-3 10:11:14

zltzlt 发表于 2020-3-3 10:09
@一个账号 @wuqramy 不要刷屏

{:10_323:}

Lyton_ 发表于 2020-3-3 10:13:24

本帖最后由 Lyton_ 于 2020-3-3 10:35 编辑

def fun21(str1):
    i=2
    count=0
    while i<len(str1):
      str2=str1[:i]
      i+=1
      if str1.count(str2)>1:
            count+=1
    if count==0:
      print('False')
    else:
      print('True')

一个账号 发表于 2020-3-3 10:15:34

zltzlt 发表于 2020-3-3 10:09
@一个账号 @wuqramy 不要刷屏

你也在刷{:10_249:}

l0stparadise 发表于 2020-3-3 10:40:03

def f341():
    str1=input("输入字符串: ")
    if len(str1)==1:
      return True
    for i in range(1,len(str1)):
      times=str1.count(str1)
      if times==float(len(str1)/i):
            return True
    else:
      return False

Croper 发表于 2020-3-3 10:42:42

大半个月不写python手都生了,返回类型应该写成"=>"还是'->'都反应了半天def func(sz:str)->bool:
    l=len(sz)
    if (l<2):
      return False
    next=[-1,0]
    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.append(p)
      if q==l:
            return True
    return False

一个账号 发表于 2020-3-3 10:45:13

本帖最后由 一个账号 于 2020-3-3 10:50 编辑

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

之前那个我有很多多余的步骤,现在应该快很多了吧:

def func(str1 : str) -> bool:
    if len(str1) % 2:
      return False
    str2 = ""
    str3 = ""
    for i in range(len(str1)//2):
      str2 += str1
      for j in range(i+1, i+len(str2)+1):   
            str3 += str1
            if str2 == str3:
                if j == len(str1)-1:
                  return True
                str3 = ""
      str3 = ""
    return False

zltzlt 发表于 2020-3-3 10:48:36

一个账号 发表于 2020-3-3 10:45
之前那个我有很多多余的步骤,现在应该快一点了吧:

改良一下你的双重 for

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

zltzlt 发表于 2020-3-3 10:48
改良一下你的双重 for

什么意思?
页: 1 2 3 [4] 5 6 7 8 9
查看完整版本: Python:每日一题 341