java 最長迴文子串

遊戲人間3733發表於2020-12-20

給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。

示例 2:

輸入: "cbbd"
輸出: "bb"

解答

public class LongPlalindrome {
	public String findPla(String s, int left, int right) {
		while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
			//如果left>0且right<字串s的長度並且字串的left和right位置的字元一樣,
			//left左移,right右移
			left--;
			right++;
		}
		//跳出迴圈時,left和right都不符合條件了,substring()方法是左閉右開區間[left,right)
		//所以left+1,而right不用變
		return s.substring(left+1, right);
	}
	public String longestPalindrome(String s) {
		int maxLen = 0;  //記錄最大長度
		String oldStr = null; //記錄最長子迴文字串
		for(int i = 0;i<s.length();i++) {
			String str1 = findPla(s, i, i); //迴文字元中間一個字元
			String str2 = findPla(s, i, i+1); //迴文字元中間兩個字元相同,如abba
			String newStr = str1.length()>str2.length()?str1:str2; //得到較長的子串
			if(maxLen<newStr.length()) { //如果新的迴文子串長度大於原來的長度,重新整理最長迴文字串
				maxLen = newStr.length();
				oldStr = newStr;
			}
		}
		return oldStr;
    }
}

相關文章