leetcode演算法題目 5

2021-10-08 06:24:35 字數 1755 閱讀 8862

給定乙個字串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...