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

Python实现不限字符间隔的顺序子串匹配代码问题排查

代码逻辑问题排查

你的代码存在3个核心错误,直接导致无法实现预期的子序列匹配效果:

  • 变量名覆盖问题:函数入参x原本存储用户输入的完整字符串,但循环内执行x = string[i]后,x被覆盖为模式串的单个字符,原始输入串直接丢失,后续所有索引查找操作的操作对象完全错误。
  • 匹配逻辑不符合规则:子序列匹配要求「后一个匹配字符必须出现在前一个匹配字符的位置之后」,但原代码每次都在全字符串范围查找字符的全局首次/末次出现位置,完全没有记录前一个字符的匹配位置,不仅会出现顺序判断错误,也无法识别重复字符(比如模式串hello里的两个l)的匹配要求。
  • 方法认知错误:Python字符串的index()/rindex()方法在找不到目标字符时会直接抛出ValueError异常,不会返回-1,原代码写的last == -1 or first == -1的异常分支永远不会触发,只要输入串缺失模式串的任意字符,程序会直接崩溃而非返回False。
修正后代码

采用指针记录匹配进度的逻辑实现,逻辑简单适合初学者理解,时间复杂度为O(n):

def checkPattern(input_str, pattern):
    # 输入串长度小于模式串,直接判定不匹配
    if len(input_str) < len(pattern):
        return False
    # 指针记录当前需要匹配的模式串字符位置
    match_pos = 0
    pattern_len = len(pattern)
    for c in input_str:
        if c == pattern[match_pos]:
            match_pos += 1
            # 所有模式字符匹配完成,直接返回成功
            if match_pos == pattern_len:
                return True
    # 遍历完输入串仍未匹配完所有模式字符
    return match_pos == pattern_len

if __name__ == "__main__":
    input_content = input()
    target = "hello"
    print("YES" if checkPattern(input_content, target) else "NO")
效果验证
  • 输入h.e.l.l.o:按顺序匹配到h、e、l、l、o,输出YES
  • 输入hlelo:匹配到h、e后,后续仅能匹配到1个l,无法凑齐两个l,输出NO
  • 输入ehllo:首个匹配到的字符是e,h出现在e之后,无法按顺序凑齐h开头的序列,输出NO
  • 输入aaahhheeelllooo:按顺序匹配到所有目标字符,输出YES

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:39:15