刷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 還有可能是回文串嗎?當然不可能!所以...