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

如何实现sequence_search方法?排查现有代码逻辑错误

你的序列搜索代码问题分析与修复方案

让我来帮你拆解代码里的问题,然后给出能正确运行的实现方案~

先说说你代码里的几个关键错误

  • 错误1:字符匹配逻辑完全颠倒
    你写的word[i].include?(key)是判断单个字符(比如"a")是否包含整个key字符串(比如"cat"),这永远会返回false——单个字符不可能装下更长的字符串。正确的逻辑应该是检查当前字符是否是key中还未匹配的第一个字符。

  • 错误2:数组追加元素的语法错误
    Ruby里向数组添加元素用的是<<,而不是>>。>>是位运算的右移符号,用在这里会直接抛出异常,这就是你标注的那行代码报错的核心原因。

  • 错误3:整体匹配逻辑不符合需求
    你的思路是收集word中所有属于key的字符,再判断是否等于key,但这无法保证字符的顺序连续性要求(比如sequence_search("coat", "cat"),你的逻辑根本收集不到正确的序列)。


正确的实现方案

我们可以用双指针法来实现,逻辑清晰且高效:

def sequence_search(word, key)
  key_index = 0
  word.each_char do |char|
    # 匹配到key当前目标字符,就移动key的指针
    if char == key[key_index]
      key_index += 1
      # 一旦key的所有字符都按顺序匹配完成,直接返回true
      return true if key_index == key.length
    end
  end
  # 遍历完word仍未匹配完key的所有字符,返回false
  key_index == key.length
end

代码逻辑解释

  1. 用key_index跟踪我们当前需要匹配key中的第几个字符,初始值为0(对应key的第一个字符)。
  2. 遍历word的每个字符,如果当前字符和key[key_index]相等,就把key_index加1——意味着我们完成了一个字符的匹配,接下来要找下一个。
  3. 当key_index等于key的长度时,说明key的所有字符都按顺序在word中找到了,直接返回true。
  4. 遍历完整个word后,如果key_index还没达到key的长度,说明没完全匹配,返回false。

测试用例验证

运行你给出的测试用例,结果完全符合预期:

  • sequence_search("arcata", "cat") → true
  • sequence_search("c1a2t3", "cat") → true
  • sequence_search("cta", "cat") → false
  • sequence_search("coat", "cat") → true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:41