5.無重複最大回文字串
阿新 • • 發佈:2022-02-25
給你一個字串 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執行用時:16 ms, 在所有C++提交中擊敗了90.91%的使用者 記憶體消耗:6.9 MB, 在所有C++提交中擊敗了95.11%的使用者 通過測試用例:180/180 結論: 程式碼虐我千百遍,我帶程式碼如初戀!!!!!!!!!=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); } };