難度:中等
連結:https://leetcode-cn.com/problems/longest-palindromic-substring/
方法一、暴力破解法,第一層循環從字符串開頭開始遍歷,第二層字符串從結尾開始遍歷,當找到與開頭的字符一樣的時候,對比它們之間的字符串,將區間字符串逐一對比,如果是回文且比臨時最大回文字符串的長度對比,如果大於重新賦值最大回文字符串,如果小於跳過。將區間字符串逐一對比,如果不是回文跳過,繼續執行上述步驟。當剩餘字符串小於最大回文字符串,循環結束,返回最大回文字符串。var longestPalindrome = function(s) {
let isWell = true;
let maxStr = s[0] || '';
for(let i = 0, l = s.length; i < l; i++){
let word = s[i];
if(l - i > maxStr.length){
for(let j = l; j > i; j--){
if(word == s[j]){
isWell = true;
if(isWell){
for(let k = i, kl = i + parseInt((j - i + 1)/2); k < kl; k++){
if(s[k]!=s[j - k + i]){
isWell = false;
}
}
if(isWell){
if(maxStr.length < s.substring(i, j + 1).length){
maxStr = s.substring(i, j + 1);
break;
}
}
}
}else{
isWell = false;
}
}
}else{
break;
}
}
return maxStr;
}
longestPalindrome('qianduankak');
var longestPalindrome = function (s) {
if (!s || s.length < 2) {
return s;
}
let start = 0, end = 0;
let n = s.length;
let centerExpend = (left, right) => {
while (left >= 0 && right < n && s[left] == s[right]) {
left--;
right++;
}
return right - left - 1;
}
for (let i = 0; i < n; i++) {
let len1 = centerExpend(i, i);
let len2 = centerExpend(i, i + 1);
let maxLen = Math.max(len1, len2);
if (maxLen > end - start) {
start = i - ((maxLen - 1) >> 1);
end = i + (maxLen >> 1);
}
}
return s.substring(start, end + 1);
};
longestPalindrome('qianduankak');
前端咖,值得關注,在看哦