題目:(和647類似)
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba" 也是乙個有效答案。
示例 2:
輸入: "cbbd"
輸出: "bb"
題解:
方法一:(面試題,要求最長只能一趟迴圈)
中心擴散法:
class solution
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++)
}return s.substring(start, end + 1);
}public int expandaroundcenter(string s, int left, int right)
return right - left - 1;
}}public class main
}
方法二:
回文字串:是乙個正讀和反讀都一樣的字串。
暴力匹配:
根據回文子串的定義,列舉所有長度大於等於 22 的子串,依次判斷它們是否是回文;
在具體實現時,可以只針對大於「當前得到的最長回文子串長度」的子串進行「回文驗證」;
在記錄最長回文子串的時候,可以只記錄「當前子串的起始位置」和「子串長度」,不必做擷取。這一步我們放在後面的方法中實現。
package test;
class solution
int maxlen = 1;
int begin = 0;
// s.charat(i) 每次都會檢查陣列下標越界,因此先轉換成字元陣列
char chararray = s.tochararray();
// 列舉所有長度大於 1 的子串 chararray[i..j]
for (int i = 0; i < len - 1; i++) }}
return s.substring(begin, begin + maxlen);
}/**
* 驗證子串 s[left..right] 是否為回文串
*/private boolean validpalindromic(char chararray, int left, int right)
left++;
right--;
}return true;
}}public class main
}
最長回文子串 力扣5
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 利用回文字串的特點 正著讀和反著讀都是一樣的,所以首先把s反轉,利用i和j控制左右邊界,不斷從s中擷取...
力扣題庫 5 最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 從中心向兩端尋找,最終得到最大的字串 找單數最大,如為回文,則長度為 2 itmp 1 itmp so...
力扣5 最長回文子串(DP)
服了,一道dp寫一天,寫出來的 還巨爛 dp思路 正序串和逆序串找最長公共子串,注意需另外判斷子串是否為回文串,比如 abchkcba 這個很坑。dp陣列記錄正序串在i之前,逆序串在j之前的最長公共子串長度,公共子串以 i j 處的char作為結束的,所以當 chararr i adverse j ...