连续输入中的同一按键可能既是上一次指令的结尾,又是下一次指令的开头。如果命中后把所有状态直接清空,就可能漏掉这种重叠序列。记录可继续使用的前缀能说明这一点。
以下是一组输入完整的独立案例。先读清规则,再按时间或操作顺序记录中间状态;遇到与预期不同的结果时,检查首次出现差异的位置。案例使用明确限定的教学模型,不假定所有作品都采用相同的处理方式。
规则和原始数据
只识别明确给出的左右方向字符序列,输入有序且无时间限制。每次输入后先判断是否完整命中,再保留当前末尾与目标开头相同的最长真前缀;目标本身不作为继续状态。
目标LLR,L/R只是两个方向符号 LRRLLLLLLRLLRRLRRLLLRL
逐步记录
输入1为L:未完整命中;保留长度1的前缀“L”,供后续输入继续匹配。
输入2为R:未完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入3为R:未完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入4为L:未完整命中;保留长度1的前缀“L”,供后续输入继续匹配。
输入5为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入6为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入7为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入8为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入9为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入10为R:完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入11为L:未完整命中;保留长度1的前缀“L”,供后续输入继续匹配。
输入12为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入13为R:完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入14为R:未完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入15为L:未完整命中;保留长度1的前缀“L”,供后续输入继续匹配。
输入16为R:未完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入17为R:未完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入18为L:未完整命中;保留长度1的前缀“L”,供后续输入继续匹配。
输入19为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入20为L:未完整命中;保留长度2的前缀“LL”,供后续输入继续匹配。
输入21为R:完整命中;保留长度0的前缀“”,供后续输入继续匹配。
输入22为L:未完整命中;保留长度1的前缀“L”,供后续输入继续匹配。
命中结束位置为[10, 13, 21],位置从一开始计数。
交叉核对与应用
在完整输入中逐位置比较所有与目标等长的片段,核对命中结束位置;另检查保留的前缀确实是当前输入的后缀,并且不存在更长的合法真前缀。
若规则另外限制输入间隔,就必须把时间状态也记录进去。这里不设置时间窗口,因此不能把相隔很久的按键仍然命中的结果直接套用到有时限的动作指令中。
建议保留原始输入、每一步状态和最终输出,再只改变一个条件做对照。重点检查空输入、相等边界、重复请求以及先后顺序;把规则约定、计算过程和显示表现分别核对,比只比较最后一个数字更容易找到原因。