脑子有雾,拨不开看不到真正的pattern. 隐隐约约意识到_ 不重要但一直想不到要怎么看。

现在分析一下

  1. 最左边的_不重要,starttarget 都可以直接找到第一个 char 再做分析. 这里假设 l 是 用于 startidx, r for target
  2. 双方都找到第一个 char 的时候,这时候如果两个char不一样说明肯定不可以
  3. 如果一样 即 start[l] == target[r]:
    1. 如果都是 L 意味着 l 的位置一定得 >= r 否则无法向左移
      1. 但是这样还有问题,如果向左移动的时候碰到了其他的字母怎么办?
    2. 如果都是 R 意味着 l 的位置一定得 <= r 否则无法向右移
      1. 同上,如果向右移动的时候碰到了其他的字母怎么办?
  4. 继续向右移动 lr, 然后重复

这样一遍 loop 下来就能确保 starttarget 的字母处于相同的顺序且次数都一样。这样一来我们就可以解决上面所提出的问题。因为顺序和次数都一样我们就能保证:

  1. 向左移动的时候一定不会碰到其他左边的字母,因为他们应该也已经向左移动到属于自己的位置上
  2. 同上