如何修正Python查找子字符串第二次出现位置的代码错误
问题解决:查找子字符串的第二次非重叠出现位置
原代码的核心问题是搜索第二次匹配时,仅从第一次匹配的下一个字符(index+1)开始,这会导致找到重叠的子串。比如输入abababa和aba时,第一次匹配在索引0,从索引1开始搜索会命中索引2的重叠aba,但你需要的是不重叠的第二次匹配,因此必须从第一次匹配的结束位置(即index + 子串长度)开始搜索。
另外原代码未处理「子串从未出现」的场景,需要补充对应的提示逻辑。
修改后的代码
n = input("请输入字符串:") c = input("请输入子字符串:") sub_length = len(c) first_index = n.find(c) if first_index == -1: print("该子字符串在原字符串中从未出现。") else: second_index = n.find(c, first_index + sub_length) if second_index == -1: print("该子字符串在原字符串中仅出现一次。") else: print(f"子字符串第二次出现的索引位置是 {second_index}。")
关键修改点
- 新增
sub_length变量存储子串长度,避免重复计算 - 先判断子串是否第一次就找不到,给出对应提示
- 第二次搜索的起始位置改为
first_index + sub_length,跳过第一次匹配的整个子串,避免重叠匹配
测试输入abababa和aba时,第一次匹配在索引0,从0+3=3的位置开始搜索,会找到索引4的aba,符合预期结果。
内容的提问来源于stack exchange,提问作者manohar nimiditalli
相关产品推荐
相关产品推荐

