鱼C论坛

 找回密码
 立即注册
查看: 1499|回复: 7

[已解决]判断输入的字符串是否由多个子字符串重复多次构成

[复制链接]
发表于 2022-3-7 22:43:56 | 显示全部楼层 |阅读模式

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

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

x
我不明白为什么一定要有第二个条件"s‘ 一定是 s 的前缀子字符串"
我觉得第三个条件足够把解限定住了,条件二是多此一举
请各位大神帮忙看一下,有没有字符串满足条件三但是不满足条件二的,请举例说明
谢谢各位前辈

n 一定是 i 的倍数
s‘ 一定是 s 的前缀子字符串
n 除以 i 的结果必定是 s’ 在 s 中出现的次数

s = input("请输入一个由字母构成的字符串:")
   
n = len(s)
for i in range(1, n//2+1):
    # 如果子字符串的长度为i,则n必须可以被i整除才行
    if n % i == 0:
        # 如果子字符串的长度为i,则i到i*2之间是一个重复的子字符串
        if s.startswith(s[i:i*2]) and s.count(s[i:i*2]) == n/i:
            print(True)
            break
# for...else的用法,小甲鱼希望大家还没有忘记哦^o^
else:
    print(False)
最佳答案
2022-3-8 13:56:01
本帖最后由 elven08 于 2022-3-8 14:00 编辑
李二蛋 发表于 2022-3-8 13:49
您说的太对了,原来是这样,可否把您进行测试的代码发一下?

  1. def nini(n):
  2.     print("增加条件二计算")
  3.     for i in range(1, n//2+1):
  4.         if n % i == 0:
  5.             if s.startswith(s[i:i*2]) and s.count(s[i:i*2]) == n/i:
  6.                 print(s[i:i*2],True)
  7.             else:
  8.                 print(s[i:i*2])


  9. def nnoi(n):
  10.     print("不用条件二计算")
  11.     for i in range(1, n//2+1):
  12.         if s.startswith(s[i:i*2]) and s.count(s[i:i*2]) == n/i:
  13.             print(s[i:i*2],True)
  14.         else:
  15.             print(s[i:i*2])



  16. s = input("请输入一个由字母构成的字符串:")
  17. n = len(s)
  18. a,b=nini(n),nnoi(n)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 00:23:19 | 显示全部楼层
嗯,它可以减少计算机的运算,不满足直接跳过,提高效率。
4.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 00:29:23 | 显示全部楼层
我试了半天,好像是这个道理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 13:48:38 | 显示全部楼层
大马强 发表于 2022-3-8 00:29
我试了半天,好像是这个道理

哈哈,前辈,您也觉得条件二是没必要的叭~有没有可能只是为了增设条件提高效率?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 13:49:48 | 显示全部楼层
elven08 发表于 2022-3-8 00:23
嗯,它可以减少计算机的运算,不满足直接跳过,提高效率。

您说的太对了,原来是这样,可否把您进行测试的代码发一下?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 13:56:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 elven08 于 2022-3-8 14:00 编辑
李二蛋 发表于 2022-3-8 13:49
您说的太对了,原来是这样,可否把您进行测试的代码发一下?

  1. def nini(n):
  2.     print("增加条件二计算")
  3.     for i in range(1, n//2+1):
  4.         if n % i == 0:
  5.             if s.startswith(s[i:i*2]) and s.count(s[i:i*2]) == n/i:
  6.                 print(s[i:i*2],True)
  7.             else:
  8.                 print(s[i:i*2])


  9. def nnoi(n):
  10.     print("不用条件二计算")
  11.     for i in range(1, n//2+1):
  12.         if s.startswith(s[i:i*2]) and s.count(s[i:i*2]) == n/i:
  13.             print(s[i:i*2],True)
  14.         else:
  15.             print(s[i:i*2])



  16. s = input("请输入一个由字母构成的字符串:")
  17. n = len(s)
  18. a,b=nini(n),nnoi(n)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-8 14:43:23 | 显示全部楼层

前辈,您去除的是i能够被n整除的条件,我说的是去除s.[i:i*2]一定是s的前缀这个条件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 10:02:13 | 显示全部楼层
李二蛋 发表于 2022-3-8 14:43
前辈,您去除的是i能够被n整除的条件,我说的是去除s.一定是s的前缀这个条件。

s.[i:i*2]?没有看到啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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