鱼C论坛

 找回密码
 立即注册
查看: 621|回复: 3

[已解决]29讲动手1和动手2 没有理解代码

[复制链接]
发表于 2025-3-8 14:12:09 | 显示全部楼层    本楼为最佳答案   
29讲 动手0: 重叠判断代码说明

下面是一个用于判断文本中是否存在重复单词的简单示例:

  1. text = input("What text: ")
  2. words = input("What words: ")
  3. words = words.split()
  4. ans = []
  5. len1 = len(text)

  6. for each in words:
  7.     index = 0
  8.     while index < len1:
  9.         index = text.find(each, index)
  10.         if index == -1:
  11.             break
  12.         else:
  13.             ans.append((each, index))
  14.             index += len(each)  # 更新索引以继续搜索下一个可能的重复

  15. print(ans)
复制代码


解释:

  • text.find(each, index) 用于在字符串 text 中从位置 index 开始查找子串 each
  • 每找到一个匹配的起始索引后,将其添加到 ans 列表,同时更新 index 以绕过当前匹配继续查找。
  • 这种方法较易处理字符串中单词的重叠和重复问题。


29讲 动手1: 字符串重复子串问题代码解释

下面是代码的详细解释:

  1. s = input("请输入一个由字母构成的字符串:")
  2. n = len(s)

  3. for i in range(1, n//2+1):
  4.     # 如果子字符串的长度为i,则n必须可以被i整除才行
  5.     if n % i == 0:
  6.         sub = s[:i]  # 取得可能的重复子串
  7.         # 如果子字符串的长度为i,则i到i*2之间是一个重复的子字符串
  8.         if s.startswith(sub) and s.count(sub) == n // i:
  9.             print(True)
  10.             break
  11. else:
  12.     print(False)
复制代码


解释:

  • 首先读取输入字符串并计算其长度 n
  • for i in range(1, n//2+1): 内循环从长度为1的子串开始检查,遍历可能的子串长度,直到一半长度位置。
  • 仅当字符串总长度能均分为若干子串时,才有可能存在完整重复子串。if n % i == 0: 检查能否整除。
  • sub = s[:i] 取出一个可能的子串。
  • s.startswith(sub) and s.count(sub) == n // i 检查子串是否为字符串开头部分,且该子串出现次数应能覆盖整个字符串。
  • 找到合法的子串马上返回 Truebreak
  • 如果遍历所有可能且没找到,最终执行 elseprint(False)


这种结构效率较高,因为只在可能的周期长度情况下深入验证子串。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-5 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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