您的位置:首页 > 编程语言 > C语言/C++

LeetCode 5. Longest Palindromic Substring(C++)

2017-03-25 22:17 609 查看
问题:找字符串中的最长回文子串

思路:

设立两个标志pre和after从每个字符开始向左右两边查询,如果s[pre]!=s[after]或者超出范围,那么该字符出发的最长回文子串为s[pre+1,...,after-1]。

初始状态分别为pre=after=i和pre=i,after=i+1对应ABA和ABBA两种不同的回文情况。

遍历维护maxLen即可找到最长回文子串。

class Solution {
public:
string longestPalindrome(string s) {
int pre = 0,after = 0;
int maxLen = 0;
string result;
for(int i=0;i<s.length();i++)
{
pre = i;
after = i;
while(1)
{
if(pre<0 || after>s.length()-1 || s[pre]!=s[after])
{
if((after-1)-(pre+1)+1>maxLen)
{
maxLen = (after-1)-(pre+1)+1;
result = s.substr(pre+1,maxLen);//用下标pre+1开始,截取长度为maxLen的子串
}
break;
}
pre--;
after++;
}
}
for(int i=0;i<s.length()&&s.length()>=2;i++)
{
pre = i;
after = i+1;
while(1)
{
if(pre<0 || after>s.length()-1 || s[pre]!=s[after])
{
if((after-1)-(pre+1)+1>maxLen)
{
maxLen = (after-1)-(pre+1)+1;
result = s.substr(pre+1,maxLen);//用下标pre+1开始,截取长度为maxLen的子串
}
break;
}
pre--;
after++;
}
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: