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 };
浙公网安备 33010602011771号