最長回文子串兩種解法

2021-09-03 01:49:41 字數 1590 閱讀 2246

刷leetcode...

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

示例 1:

輸入:"babad"輸出:"bab"注意:"aba" 也是乙個有效答案。
示例 2:

輸入:"cbbd"輸出:"bb"
思路:遍歷每乙個字元,以字元為中心,將字串對折,如果對應的字元相等,則可以確認該字串為回文串。

下面是第一次的解法,在每個字元中間插入乙個間隔符,如s="abb",插入間隔符之後變成str="a#b#b",插入間隔符之後不會影響原回文字元的順序。

package algorithms;

public class palindromic_substring5

//耗時671ms

public static string longestpalindrome(string s)

}for(int i = 0;i < length;i ++) else

}if(temps.equals(""))

temps = temps.replaceall("#", "");

temp = temps.length();

if(temp > max)

temps = "";

}return re;

}else

}}

經過思考,將上述方法進行改進,不需要往字串中插入間隔符

package algorithms;

public class palindromic_substring5

//耗時97ms

public static string longestpalindrome(string s) else else if((k+1) < s.length() && s.charat(j) == s.charat(k+1))

}j --;

k ++;}}

if(temps.equals(""))

temp = temps.length();

if(temp > max)

temps = "";

if(k >= s.length())

}return re;

}else

} //判斷是否為回文串

public static boolean ispalindromicsubstring(string s)

char ch = s.tochararray();

for(int i = 0;i < ch.length/2; i++)

} return true;

}}

變快了很多。

看提交記錄中的耗時分布圖,最快的居然只用了6ms,而且耗時在20-30ms內的解法還很多,感慨一句自己真是很辣雞啊

最長回文子串解法

沒咋麼過腦子,瞬間能想到的思路大概為 abcabcbb 比如這個字串 首先 宣告乙個陣列 裡面存放各種開分來的字串 切分條件是當這次迴圈的值 存在於當前的陣列中 像這樣abc bca cab abc bcb cb 最初的實現 var str 生成一些隨機字元 for var i 0 i 100000...

3種解法 求解最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 原理就是對字串從前到後依次進行遍歷,最外層迴圈為子串頭,第二層迴圈為確定子串尾,第三層迴圈為確定...

最長回文子串 解法一

其實最最簡單的演算法,也是效率最低的應該就是列舉子串,不過在這裡沒有必要拿來寫 解法一是在列舉子串上優化的 我們用 a,b 來表示子串,即從位置a到位置b的子串 假設現在我們已經知道了子串 x,y 不是回文串,那麼 x 1,y 1 x 2,y 2 x n,y n 還有可能是回文串嗎?當然不可能!所以...