https://leetcode.com/problems/longest-palindromic-substring/
找到最長的迴文子串。
一種方法是從頭到尾遍歷一次,在每次迭代中,以當前字符爲中心,像兩側擴展判斷是否爲迴文。
然後以當前爲中心最長的那個迴文串,並記錄下最長的迴文串的start和end。
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() == 0) {
return "";
}
int start = 0;
int end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandCenter(s, i, i); // 'abba' 以 b 爲中心擴展
int len2 = expandCenter(s, i, i + 1); // 'abba' 以 bb 爲中心擴展
int maxLen = Math.max(len1, len2); // 找出最大的那個
if (maxLen > end - start) { // 與歷史最大的比較
start = i - (maxLen - 1) / 2;
end = i + maxLen / 2;
}
}
return s.substring(start, end + 1);
}
public int expandCenter(String s, int l, int r) {
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
return r - l - 1;
}
}