You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在字符串中查找子串索引?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避免无效遍历。
  2. 双重循环匹配:外层循环遍历所有可能的起始索引,内层循环逐个字符对比,确认子串是否匹配。
  3. 及时返回结果:找到匹配的子串立即返回起始索引,无需继续遍历;遍历结束无匹配则返回-1。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:20:30