鱼C论坛

 找回密码
 立即注册
查看: 9280|回复: 171

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

[复制链接]
发表于 2020-3-2 20:02:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


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

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

示例 1:

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

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

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


欢迎大家一起答题!
最佳答案
2020-3-2 22:37:48
  1. def f341(string):
  2.     lenth1 = len(string)
  3.     lenth2 = lenth1 // 2
  4.     for i in range(lenth1//2):
  5.         if lenth1%lenth2 == 0:
  6.             n = lenth1 / lenth2
  7.             if int(n) * string[:lenth2] == string:
  8.                 return 1
  9.         lenth2 -=1
  10.             
  11.     return 0



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

  13. if f341(string):
  14.     print("是由一个子串重复多次构成!")
  15. else:
  16.     print("不是由一个子串重复多次构成!")
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-2 20:07:58 | 显示全部楼层
这样可以吗:

输入:"abbab"
输出:True
解释:可由子字符串 "ab" 重复二次构成。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:08:34 | 显示全部楼层
一个账号 发表于 2020-3-2 20:07
这样可以吗:

输入:"abbab"

不可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:12:21 | 显示全部楼层

子串数量必须大于 1 并且要连在一起对吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:13:46 | 显示全部楼层
一个账号 发表于 2020-3-2 20:12
子串数量必须大于 1 并且要连在一起对吧

是,必须只能由重复若干次的子串构成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:21:36 | 显示全部楼层
  1. def func(str1):
  2.     str2 = ""
  3.     str3 = ""
  4.     for i in range(len(str1)):
  5.         for j in range(i, len(str1)):
  6.             str2 += str1[j]            
  7.             if len(str2) > 1:
  8.                 for k in range(j+1, len(str1)):   
  9.                     str3 += str1[k]
  10.                     if str2 == str3:
  11.                         return True
  12.                 str3 = ""
  13.         str2 = ""
  14.     return False
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:23:11 | 显示全部楼层
先试试
  1. def f341(s):
  2.     st = ''
  3.     for i in range(len(s)):
  4.         if s[i] not in st and s[i+1] not in st:
  5.             st += s[i]         
  6.         else:
  7.             st += s[i]
  8.             break
  9.     if len(s) % len(st):
  10.         return False
  11.     else:
  12.         return True
  13. s = "abab"
  14. s1 = "aba"
  15. s2 = "abcabcabcabc"
  16. print(f341(s2))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:24:15 | 显示全部楼层

解答错误

输入:"bb"
输出:False
预期结果:True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:24:36 | 显示全部楼层
优化了一下:

  1. def func(str1):
  2.     str2 = ""
  3.     str3 = ""
  4.     for i in range(len(str1)):
  5.         for j in range(i, len(str1)):
  6.             str2 += str1[j]            
  7.             if len(str2) > 1:
  8.                 for k in range(j+1, len(str1)):   
  9.                     str3 += str1[k]
  10.                     if str2 == str3:
  11.                         return True
  12.                     if len(str3) >= len(str2):
  13.                         break
  14.                 str3 = ""
  15.         str2 = ""
  16.     return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:24:50 | 显示全部楼层

解答错误

输入:"abac"
输出:True
预期结果:False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:26:10 From FishC Mobile | 显示全部楼层
def fun341():
    str1 = input()
    str2 = str1[0:int(len(str1)/2)]
    if str2*2==str1:
        print(True)
    else:
        print(False)

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:27:26 | 显示全部楼层
寻风 发表于 2020-3-2 20:26
def fun341():
    str1 = input()
    str2 = str1[0:int(len(str1)/2)]

解答错误

输入:"ababab"
输出:False
预期结果:True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:28:44 | 显示全部楼层
一个账号 发表于 2020-3-2 20:27
我这里是 False,你再运行运行:

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:30:08 | 显示全部楼层

搞错了,看成别人的了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:30:20 | 显示全部楼层
本帖最后由 fan1993423 于 2020-3-2 20:33 编辑
  1. def fun341(s):
  2.     if len(set(s))==1 and len(s)!=1:
  3.         return True
  4.     elif len(s)==1:return False
  5.     for i in range(len(s)//2):
  6.         if s[:i+1]*(len(s)//len(s[:i+1]))==s:
  7.             return True
  8.     return False
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:30:54 | 显示全部楼层
我还以为 1 个字符不算子串,把 if 去掉了:

  1. def func(str1):
  2.     str2 = ""
  3.     str3 = ""
  4.     for i in range(len(str1)):
  5.         for j in range(i, len(str1)):
  6.             str2 += str1[j]            
  7.             for k in range(j+1, len(str1)):   
  8.                 str3 += str1[k]
  9.                 if str2 == str3:
  10.                     return True
  11.                 elif len(str3) >= len(str2):
  12.                     break
  13.                 str3 = ""
  14.         str2 = ""
  15.     return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:31:05 | 显示全部楼层

解答错误

输入:"a"
输出:True
预期结果:False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:32:27 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-3 19:57 编辑

应该没错误了,请测试
  1. def f341(s):
  2.     ls = len(s)
  3.     if ls <= 1:return False
  4.     #if ls%2: return False   
  5.     st = [i for i in range(1, ls//2+1) if not ls%i][::-1]                        
  6.     for i in st:
  7.         if s[:i]*(ls//i) == s:
  8.             return True                          
  9.     return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-2 20:32:28 | 显示全部楼层
一个账号 发表于 2020-3-2 20:30
我还以为 1 个字符不算子串,把 if 去掉了:

解答错误

输入:"abab"
输出:False
预期结果:True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 20:32:32 | 显示全部楼层
zltzlt 发表于 2020-3-2 20:31
解答错误

输入:"a"

好吧,我想到可以由a构成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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