LeetCode214 最短回文串

2021-09-12 08:17:35 字數 1099 閱讀 4452

給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。

示例 1:

輸入:"aacecaaa"輸出:"aaacecaaa"
示例 2:

輸入:"abcd"輸出:"dcbabcd"
1、s=s1+s2,其中s1是回文串,s2是s-s1。

2、ans=反轉後的s2 +s

class solution 

if(left>right)

break;

}string s2=s.substr(i+1,s.length()-i-1);

reverse(s2.begin(),s2.end());

return s2+s;

}};

這一種方法是比較巧妙的,r=s;reverse(r.begin(),r.end());t=s+"#"+r,要求s從起始位置開始的最長回文子串,就可以轉換成t的最長字首字尾問題; 

比如s=ccab,r=bacc,t=ccab#bacc,那麼s中最長的回文串cc也就是t中字首cc。 

再比如s=aacecaaa,r=aaacecaa,t=aacecaaa#aaacecaa,則最長回文子串是aacecaa,而t中字首為aacecaa。 

這裡要特別注意需要加上#,這個很重要,防止s=aaa的時候出現錯誤。 

所以這題其實就演變成kmp演算法,求解next陣列。具體原理見kmp演算法

class solution 

if(t[i]==t[j+1])

next[i]=j;

}r=r.substr(0,r.size()-next[t.size()-1]-1);

return r+s;

}};

LeetCode 214 最短回文串

給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 和hdu clairewd s message類似 其實等價於找最長字首回文串 aace...

leetcode 214 最短回文串

給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 因為只能從最前面新增字元,而且要保證新增了字元後組成1個回文串,所以列舉所有可能。對給...

LeetCode 214 最短回文串

給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。class solution def shortestpalindrome self,s str str 回文串從首到尾和從尾部到首部字串同,字串表示的數字同樣也相等。子串問題的乙個經典的解決方法...