1. // 判断是否是回文串,枚举法
    2. bool isPalindrome(string s)
    3. {
    4. int n = s.size();
    5. // 只枚举一半就ok.
    6. for (int i = 0; i < n / 2; i++) {
    7. if (str[i] != str[n - i - 1]) {
    8. return false;
    9. }
    10. }
    11. return true;
    12. }
    13. // 最长回文子串,中心扩展法
    14. string longestPalindrome(string s) {
    15. int len = s.size();
    16. int pos = 0;
    17. if (len < 2) {
    18. return s;
    19. }
    20. string ans;
    21. int maxLen = 1;
    22. for (int i = 0; i < len; i++) {
    23. int left = i;
    24. int right = i;
    25. // 以s[i]为中心,向两边扩展
    26. while (left >= 0 && right < len && s[left] == s[right]) {
    27. left--;
    28. right++;
    29. }
    30. if (right - left - 1 > maxLen) {
    31. maxLen = right - left - 1;
    32. pos = left + 1;
    33. }
    34. // 以s[i]、s[i + 1]为中心,向两边扩展
    35. left = i;
    36. right = i + 1;
    37. while (left >= 0 && right < len && s[left] == s[right]) {
    38. left--;
    39. right++;
    40. }
    41. if (right - left - 1 > maxLen) {
    42. maxLen = right - left - 1;
    43. pos = left + 1;
    44. }
    45. }
    46. return s.substr(pos, maxLen);
    47. }