給定乙個字串s
,找到s
中最長的回文子串。可以假設s
的最大長度為 1000。
示例 1:
輸入:"babad"輸出:"bab"注意:"aba" 也是乙個有效答案。示例 2:
輸入:"cbbd"輸出:"bb"/*暴力解法:
1、依據回文串定義,遍歷列舉所有長度大於等於 2的子串,依次判斷是否為回文串;
2、針對大於「當前得到的最長回文子串長度」的子串進行「回文驗證」;
3、在記錄最長回文子串時,記錄「當前子串的起始位置」和「子串長度」。*/
class solution
//將字串轉化為字元陣列
char s_array = s.tochararray();
//初始化回文串的最長長度
int max_len = 1;
//初始化回文串起始位置
int start = 0;
//遍歷字串,列舉所有長度》1的子串
for(int i = 0; i < s.length() - 1; i++)}}
//計算子串的末尾
int end = start + max_len;
//返回最長子串
return s.substring(start, end);
}//判斷當下的字串子串是否為回文串
public boolean ispalindromestring(char array, int start, int end)
//將字串轉化為字元陣列
char s_array = s.tochararray();
//初始化回文串的最長長度
int max_len = 1;
//初始化回文串起始位置
int start = 0;
//狀態矩陣 isps[i][j]表示s[i][j]是否為回文串
int isps = new int[s.length()][s.length()];
// boolean isps = new boolean[s.length()][s.length()];
//對於對角線元素,即字串中自身對自身的字元來說,其本身為回文串
for(int i = 0; i < s.length(); i++)
//計算填寫所要維護的狀態矩陣
//先得到小子串的回文判定,然後大子串才能參考小子串的判斷結果
for(int j = 1; j < s.length(); j++)elseelse
}//記錄子串的長度,標記起始位置
if(isps[i][j] == 1 && (j - i + 1) > max_len)}}
//計算子串的末尾
int end = start + max_len;
//返回最長子串
return s.substring(start, end);}}
詳細分析參考:要對動態規劃演算法的思想理解,填表時注意正確的順序,空間換時間)
LeetCode演算法題目 7
題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。解決方案 反轉整數的方法可以與反轉字串進行模擬。我們想重複 彈出 xx 的最後一位...
LeetCode演算法題目 3
給定乙個字串,找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為無重...
LeetCode演算法題目 4
給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 n...