题目:对于给定字符串S,求出S的最长回文子串。S的长度不超过1000,而且保证存在唯一的最长回文子串。
题解:今天的题解有两篇文章里讲得非常好了已经,就不多说了。按顺序,看这里,看这里。
++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { private: string subPalindrome(string s, int l, int r){ int len = s.length(); while(l>=0 && r <= len && s[l] == s[r]){ l--; r++; } l++;r--; return s.substr(l,r-l+1); } public: string longestPalindrome(string s) { int len = s.length(); if(len == 0) return ""; string longestPal = s.substr(0, 1); for(int i = 0; i < len; i++){ string tmp = subPalindrome(s, i, i); if(tmp.length() > longestPal.length()){ longestPal = tmp; } if(s[i] == s[i+1]){ tmp = subPalindrome(s, i, i+1); if(tmp.length() > longestPal.length()){ longestPal = tmp; } } } return longestPal; } };
|
carolz比较懒,当然么写最优的解法╮(╯▽╰)╭