如何在字符串中查找子串索引?Python代码问题求助
问题排查与手动实现子串索引查找函数
你的代码存在的核心问题
- 字符串未加引号:
str1 = Ronaldo这类写法会被Python当作变量名处理,引发NameError,必须用引号包裹字符串(如str1 = "Ronaldo")。 - 判断逻辑完全颠倒:你需要检查
str2是否是str1的子串,但代码里写的是if str1 in str2,这是反过来检查str1是否在str2中。 - 违反禁用
find()的要求:你明确说明不能使用s.find(),但代码中仍然调用了该方法。 - 函数返回逻辑错误:函数内部直接打印结果后返回
None,导致外部调用print(contains_string(...))会额外输出None,正确做法是让函数返回索引值或-1,由外部负责打印。 - 索引预期偏差:如果
str1 = "Ronaldo",子串"Ron"的起始索引是0而非3,若你预期结果是3,可能实际的str1是类似"XXXRonald"的字符串,需对应调整。
修正后的代码(完全手动实现子串查找)
def contains_string(str1, str2): len_str1 = len(str1) len_str2 = len(str2) # 子串比原字符串长,直接返回-1 if len_str2 > len_str1: return -1 # 遍历所有可能的起始位置 for start_idx in range(len_str1 - len_str2 + 1): # 逐字符匹配子串 is_match = True for offset in range(len_str2): if str1[start_idx + offset] != str2[offset]: is_match = False break if is_match: return start_idx # 无匹配返回-1 return -1 # 正确定义字符串(加引号) str1 = "Ronaldo" # 若你的目标str1是索引3开始有"Ron",替换为对应字符串即可 str2 = "Ron" str3 = "Messi" print(contains_string(str1, str2)) # 输出0(对应Ronaldo),若str1是XXXRon则输出3 print(contains_string(str1, str3)) # 输出-1
代码说明
- 边界处理:先判断子串长度是否大于原字符串,直接返回-1避免无效遍历。
- 双重循环匹配:外层循环遍历所有可能的起始索引,内层循环逐个字符对比,确认子串是否匹配。
- 及时返回结果:找到匹配的子串立即返回起始索引,无需继续遍历;遍历结束无匹配则返回-1。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

