马拉车算法的核心,手机码字,就没法贴图了。
1 先扩展字符串,在字符串中间插一个#,这样不管原来的串是奇数还是偶数,就都变偶数了。方便后面做对称运算。
2 第二点核心就是给一个扩展后的字符串长度的数组p,这个p数组记录了以每个字符为中心的回文半径。这个半径有了之后,直接算一下就能得到最大回文子串了。
3 第三就是计算过程了,首先以第一个字符为原点,向外扩张。然后记录半径以及最右边界。然后选择第二个字符,做同样的操作。如果半径大于第一个字符,就更新当前点为中心点,以及最右侧边界。第一个字符显然半径就是1,因为左边没有字符。这样依次向前推进,遇到大的右边界就更新右边界和中心点,遇到小于右边界的就不用管。因为大的区域也是有对称性的,如果新的区域右边界都没有超出原来大的区域,那么可以肯定,这个新的区域一定小于原来的大区域,因为大区域左右两边的子集也是对称的。
4 然后依次往右推进,直到遍历完。
盗个图,贴别人的核心代码!
因篇幅问题不能全部显示,请点此查看更多更全内容