补充一下strStr题解的推导过程吧
性质
关于 π ( i ) ≤ π ( i − 1 ) + 1 \pi(i)\le \pi(i-1)+1 π(i)≤π(i−1)+1
在下文中可能有不严谨的地方在于可能会出现 π ( i ) ≤ 2 \pi(i)\le2 π(i)≤2的情况,从而导致出现左区间的右端点比左端点小。右区间的左端点比右端点大,从而形成非法区间。这个时候我们规定这个区间不存在,其对应的值是0即可。
依据 π ( i ) \pi(i) π(i)定义得: s [ 0 : π ( i ) − 1 ] = s [ i − π ( i ) + 1 : i ] s[0:\pi(i)-1]=s[i-\pi(i)+1:i] s[0:π(i)−1]=s[i−π(i)+1:i]
将两区间的右端点同时左移,可得 s [ 0 : π ( i ) − 2 ] = s [ i − π ( i ) + 1 : i − 1 ] s[0:\pi(i)-2]=s[i-\pi(i)+1:i-1] s[0:π(i)−2]=s[i−π(i)+1:i−1]
依据 π ( i − 1 ) \pi(i-1) π(i−1)定义得: π ( i − 1 ) ≥ π ( i ) − 1 \pi(i-1)\ge \pi(i)-1 π(i−1)≥π(i)−1,即 π ( i ) ≤ π ( i − 1 ) + 1 \pi(i)\le \pi(i-1)+1 π(i)≤π(i−1)+1