|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- # 动手0 重叠的判断不了
- text = input("What text:")
- words = input("What words:")
- words = words.split()
- ans = []
- w0 = words[0]
- len1 = len(text)
- len2 = 0
- i_copy = 0
- for each in words:
- len2 = len(each)
- w0 = each[0]
- for i in range (0,len1):
- len0 = 1
- if text[i] == w0:
- i_copy = i
- for j in range(1,len2):
- i = i + 1
- if each[j] == text[i]:
- len0 += 1
- if len0 == len2:
- ans.append([i_copy,i_copy+len2-1])
- else:
- break
- else:
- continue
- print(ans)
复制代码
动手0 的代码我直接用循环判断了,确实很复杂,但是没有想到答案用find的方法,一下子忘记这个函数了,想问问如果就是单纯用循环的话,应该怎么做呢?目前这个代码可以判断前两种情况,但是没有办法判断那种重复出现的代码就是第三种情况,请问应该怎么修改呢?
- # 动手1 答案
- 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)
复制代码
动手1完全不太理解,可以详细解释一下代码吗?
29讲 动手0: 重叠判断代码说明
下面是一个用于判断文本中是否存在重复单词的简单示例:
- text = input("What text: ")
- words = input("What words: ")
- words = words.split()
- ans = []
- len1 = len(text)
- for each in words:
- index = 0
- while index < len1:
- index = text.find(each, index)
- if index == -1:
- break
- else:
- ans.append((each, index))
- index += len(each) # 更新索引以继续搜索下一个可能的重复
- print(ans)
复制代码
解释:
- text.find(each, index) 用于在字符串 text 中从位置 index 开始查找子串 each。
- 每找到一个匹配的起始索引后,将其添加到 ans 列表,同时更新 index 以绕过当前匹配继续查找。
- 这种方法较易处理字符串中单词的重叠和重复问题。
29讲 动手1: 字符串重复子串问题代码解释
下面是代码的详细解释:
- s = input("请输入一个由字母构成的字符串:")
- n = len(s)
- for i in range(1, n//2+1):
- # 如果子字符串的长度为i,则n必须可以被i整除才行
- if n % i == 0:
- sub = s[:i] # 取得可能的重复子串
- # 如果子字符串的长度为i,则i到i*2之间是一个重复的子字符串
- if s.startswith(sub) and s.count(sub) == n // i:
- print(True)
- break
- else:
- 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 检查子串是否为字符串开头部分,且该子串出现次数应能覆盖整个字符串。
- 找到合法的子串马上返回 True 并 break。
- 如果遍历所有可能且没找到,最终执行 else 的 print(False)。
这种结构效率较高,因为只在可能的周期长度情况下深入验证子串。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|