Longest Palindromic Substring

来源:互联网 发布:淘宝产品商标注册 编辑:程序博客网 时间:2024/06/06 03:07

题目描述

这里写图片描述

解题思路

题目要求从一个字符串s的子字符串中找到一个最长的回文字符串,那么解题思路显而易见,1是要求子字符串是回文字符串,2是要求该字符串是最长的。
回文字符串有个显然的特征是沿着中心那个字符轴对称。所以对于每个字符串我们只需要从中心向两端展开,观察两端的字符是否相同即可判断是否为回文字符串,而最长这一点,我们可以设置个变量longest,每次遍历完一个子字符串都与longest做比较。这样时间复杂度就是O(n^2)。

c++代码实现

class Solution {public:    string Palindrome(string s, int left, int right) {          int length = s.length();          while (left >= 0 && right < length && s[left] == s[right]) {              left--;              right++;          }          return s.substr(left + 1, right - left -1);      }      string longestPalindrome(string s) {        int n = s.length();          if (n == 0) return "";          string longest = s.substr(0, 1);         for (int i = 0; i < n-1; ++i) {              string s1 = Palindrome(s, i, i);              if (s1.length() > longest.length()) longest = s1;            string s2 = Palindrome(s, i, i+1);             if (s2.length() > longest.length()) longest = s2;          }          return longest;      }};

运行结果:
这里写图片描述

反思与总结

此题难度一般,但凡设计到回文字符串,一般都会采用我上面的解题思路,但这里阐述了更为简洁的做法,不得不佩服其境界之高!