zltzlt 发表于 2020-3-2 20:02:45

Python:每日一题 341

今天的题目:

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。

说明:给定的字符串只含有小写英文字母。

示例 1:

输入:"abab"
输出:True
解释:可由子字符串 "ab" 重复两次构成。
示例 2:

输入:"aba"
输出:False
示例 3:

输入:"abcabcabcabc"
输出:True
解释:可由子字符串 "abc" 重复四次构成。(或者子字符串 "abcabc" 重复两次构成。)

{:10_298:}欢迎大家一起答题!{:10_298:}

一个账号 发表于 2020-3-2 20:07:58

这样可以吗:

输入:"abbab"
输出:True
解释:可由子字符串 "ab" 重复二次构成。

zltzlt 发表于 2020-3-2 20:08:34

一个账号 发表于 2020-3-2 20:07
这样可以吗:

输入:"abbab"


不可以

一个账号 发表于 2020-3-2 20:12:21

zltzlt 发表于 2020-3-2 20:08
不可以

子串数量必须大于 1 并且要连在一起对吧

zltzlt 发表于 2020-3-2 20:13:46

一个账号 发表于 2020-3-2 20:12
子串数量必须大于 1 并且要连在一起对吧

是,必须只能由重复若干次的子串构成

一个账号 发表于 2020-3-2 20:21:36

def func(str1):
    str2 = ""
    str3 = ""
    for i in range(len(str1)):
      for j in range(i, len(str1)):
            str2 += str1            
            if len(str2) > 1:
                for k in range(j+1, len(str1)):   
                  str3 += str1
                  if str2 == str3:
                        return True
                str3 = ""
      str2 = ""
    return False

kinkon 发表于 2020-3-2 20:23:11

先试试
def f341(s):
    st = ''
    for i in range(len(s)):
      if s not in st and s not in st:
            st += s         
      else:
            st += s
            break
    if len(s) % len(st):
      return False
    else:
      return True
s = "abab"
s1 = "aba"
s2 = "abcabcabcabc"
print(f341(s2))

zltzlt 发表于 2020-3-2 20:24:15

一个账号 发表于 2020-3-2 20:21


解答错误

输入:"bb"
输出:False
预期结果:True

一个账号 发表于 2020-3-2 20:24:36

优化了一下:

def func(str1):
    str2 = ""
    str3 = ""
    for i in range(len(str1)):
      for j in range(i, len(str1)):
            str2 += str1            
            if len(str2) > 1:
                for k in range(j+1, len(str1)):   
                  str3 += str1
                  if str2 == str3:
                        return True
                  if len(str3) >= len(str2):
                        break
                str3 = ""
      str2 = ""
    return False

zltzlt 发表于 2020-3-2 20:24:50

kinkon 发表于 2020-3-2 20:23
先试试

解答错误

输入:"abac"
输出:True
预期结果:False

寻风 发表于 2020-3-2 20:26:10

def fun341():
    str1 = input()
    str2 = str1
    if str2*2==str1:
      print(True)
    else:
      print(False)

zltzlt 发表于 2020-3-2 20:27:26

寻风 发表于 2020-3-2 20:26
def fun341():
    str1 = input()
    str2 = str1


解答错误

输入:"ababab"
输出:False
预期结果:True

zltzlt 发表于 2020-3-2 20:28:44

一个账号 发表于 2020-3-2 20:27
我这里是 False,你再运行运行:

一个账号 发表于 2020-3-2 20:30:08

zltzlt 发表于 2020-3-2 20:28


搞错了,看成别人的了{:10_245:}

fan1993423 发表于 2020-3-2 20:30:20

本帖最后由 fan1993423 于 2020-3-2 20:33 编辑

def fun341(s):
    if len(set(s))==1 and len(s)!=1:
      return True
    elif len(s)==1:return False
    for i in range(len(s)//2):
      if s[:i+1]*(len(s)//len(s[:i+1]))==s:
            return True
    return False

一个账号 发表于 2020-3-2 20:30:54

我还以为 1 个字符不算子串,把 if 去掉了:

def func(str1):
    str2 = ""
    str3 = ""
    for i in range(len(str1)):
      for j in range(i, len(str1)):
            str2 += str1            
            for k in range(j+1, len(str1)):   
                str3 += str1
                if str2 == str3:
                  return True
                elif len(str3) >= len(str2):
                  break
                str3 = ""
      str2 = ""
    return False

zltzlt 发表于 2020-3-2 20:31:05

fan1993423 发表于 2020-3-2 20:30


解答错误

输入:"a"
输出:True
预期结果:False

kinkon 发表于 2020-3-2 20:32:27

本帖最后由 kinkon 于 2020-3-3 19:57 编辑

应该没错误了,请测试
def f341(s):
    ls = len(s)
    if ls <= 1:return False
    #if ls%2: return False   
    st = [::-1]                        
    for i in st:
      if s[:i]*(ls//i) == s:
            return True                        
    return False

zltzlt 发表于 2020-3-2 20:32:28

一个账号 发表于 2020-3-2 20:30
我还以为 1 个字符不算子串,把 if 去掉了:

解答错误

输入:"abab"
输出:False
预期结果:True

fan1993423 发表于 2020-3-2 20:32:32

zltzlt 发表于 2020-3-2 20:31
解答错误

输入:"a"


好吧,我想到可以由a构成
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: Python:每日一题 341