leetcode题解 5. Longest Palindromic Substring

Posted on 2018-04-06 15:11  wangziyan  阅读(140)  评论(0)    收藏  举报

题目:

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"

从对题目的理解来看,其实就是求最长的回文子串。

知识:首先当然是字符串string类的知识,在3题的题解中已经总结过,

那么这次就只用补充一个求子串的函数,摘抄一个博主写的区别:

substr有2种用法:
假设:string s = "0123456789";

string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"

string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"

下面就来说说我的思路,这个题我的方法就是从中间开始试,不断的向两边扩展,

中间有可能是一个字符不,也有可能是两个字符,如果这个字符相等就不断的往后去找。

当然中间遇到了一些bug,比如maxLen要设置为1,这样因为我的是只有一个字符进不去循环的问题就解决了。

当然,看到网上一些比较好的代码i是从1开始循环就不会牵扯这么多的问题。

这是修改以后的代码

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