资料参考:
心得:
(1)Manacher算法能达到O(n)复杂度,但是很难描述,又不经典,所以没有必要一定要掌握
(2)动态规划的方法值得仔细琢磨
Define a 2-dimension array "table" and let table[i][j] denote whether substring from i to j is palindrome.(定义一个二维数组,用table[i][j]代表从i到j的子串是否为回文串)
Start condition:
table[i][i] == 1; table[i][i+1] == 1 => s.charAt(i) == s.charAt(i+1)
Changing condition:(这是一种递归的思路,table[i+1][j-1]为回文串,且str[i]和str[j]相等,所以i到j为回文串,即table[i][j]=1)
table[i][j] == 1 => table[i+1][j-1] == 1 && s.charAt(i) == s.charAt(j)
(3)参考资料2中的O(n2)算法也很清晰:
从里向外来判断。也就是先判断子字符串(如dd)是不是对称的。如果它(dd)不是对称的,那么向该子字符串两端各延长一个字符得到的字符串肯定不是对称的。如果它(dd)对称,那么只需要判断它(dd)两端延长的一个字符是不是相等的,如果相等,则延长后的字符串是对称的。