题目描述:

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.

Example:

Input: "cbbd"

Output: "bb"

本题要我们找的是字符串中长度最长的“回文”(从左从右读都一样)。

解题记录:

根据“回文”“轴对称”的特点,可先找到回文的中心,再由中心向外扩张找长度和起始位置。

我一开始做的时候将中心分为两种:一种是"aa"这样的,一种是"aba"这样的。然后向外扩张寻找“回文”。

还有一种寻找中心的办法就是:以相同的字符组成的字符串为中心,像"baab"就以"aa"为中心,"baaaaa"就以"aaaaa"为中心。也就是第二个代码的办法。

我的代码:

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int beg=0,max=1,length=s.length();
 5         for(int i=0;i<length;i++){
 6             if(s[i]==s[i+1]){
 7                 int j=1;
 8                 while(i-j>=0&&i+j+1<length){
 9                     if(s[i-j]!=s[i+j+1])
10                         break;
11                     j++;
12                 }
13                 if(2*j>max){
14                     max=2*j;
15                     beg=i-j+1;
16                 }
17             }
18             if(i<length-1&&s[i]==s[i+2]){
19                 int j=1;
20                 while(i-j>=0&&i+j+2<length){
21                     if(s[i-j]!=s[i+j+2])
22                         break;
23                     j++;
24                 }
25                 if(2*j+1>max){
26                     max=2*j+1;
27                     beg=i-j+1;
28                 }
29             }
30         }
31         return s.substr(beg,max);
32     }
33 };

优质解答:

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int beg=0,max=1,n=s.length();
 5         for(int i=0;i<n;i++){
 6             int left=i,right=i;
 7             while(right<n-1&&s[right]==s[right+1]) right++;
 8             while(left>0&&right<n-1&&s[left-1]==s[right+1]){
 9                 left--;
10                 right++;
11             }
12             if(right-left+1>max){
13                 beg=left;
14                 max=right-left+1;
15             }
16         }
17         return s.substr(beg,max);
18     }
19 };

 

posted on 2018-02-17 11:36  宵夜在哪  阅读(80)  评论(0编辑  收藏  举报