回文子串,就是正着读和反正读是一样的字符串,比如 “上海自来水来自海上”
palindrome 回文的
[ˈpælɪndroʊm]
有3个解法
使用双指针解答
分为两种情况
eab|bac 012 345 L R
偶数的情况下可以明确看到中心点是2和3中间的空隙。这个情况下
[i,i+1]
eabbace 0123456 (LR)
奇数的情况下可以看到中心点是index = 3
class Solution { public String longestPalindrome(String s) { // 异常 if (null == s) { return null; } String longest = ""; for (int i = 0; i < s.length(); i ++) { String odd = isPalindrome(s, i, i); if (longest.length() < odd.length()) { longest = odd; } String even = isPalindrome(s, i, i + 1); if (longest.length() < even.length()) { longest = even; } } return longest; } public String isPalindrome(String s, int left, int right) { while (left >= 0 && right < s.length()) { if (s.charAt(left) != s.charAt(right)) { // 左右指针不相等的话,表示不是回文字符串 break; } left--; right++; } return s.substring(left + 1, right); } }