1. 程式人生 > 其它 >5.無重複最大回文字串

5.無重複最大回文字串

給你一個字串 s,找到 s 中最長的迴文子串。

示例 1:

輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
示例 2:

輸入:s = "cbbd"
輸出:"bb"

提示:

1 <= s.length <= 1000
s 僅由數字和英文字母組成

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-palindromic-substring
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路:遍歷s中每個字元,以該字元為中心,判斷迴文長度,並與最大MAX長度比較。

應用方法:string s.substr(int start,int length);

解題:

class Solution {
public:
    string longestPalindrome(string s) {
        int Max=0;
        int MaxStart=-1;
        int left;
        int right;
        int chongfu=1;
        if(s.length()<2){
            return s;
        }
        for(int i=0;i<s.length();i++){
            left=i;
            right
=i; chongfu=1; //判斷重複字元狀態碼,為1則判斷,為0則不判斷 while(left>=0&&right<s.length()){ if(s[left]==s[right+1]&&chongfu==1){ //過濾重複字元;初始判斷迴文時需過濾重複字元 right++; //判斷完畢後歸0,不在判斷 continue; }
else{ chongfu=0; } if(left!=0&&right!=s.length()-1&&s[left-1]==s[right+1]){ left-=1; right+=1; } else { break; } } if(right-left+1>Max){ Max=right-left+1; MaxStart=left; } } return s.substr(MaxStart,Max); } };
執行用時:16 ms, 在所有C++提交中擊敗了90.91%的使用者 記憶體消耗:6.9 MB, 在所有C++提交中擊敗了95.11%的使用者 通過測試用例:180/180 結論: 程式碼虐我千百遍,我帶程式碼如初戀!!!!!!!!!