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”
C++
class Solution {
public:
string longestPalindrome(string s) {
int start=0;
int length=0;
string tmp;
//结果
string res;
for(int i=0;i<s.size();i++)
{
if(s.size()-i<length)
{
break;
}
//在左边找
tmp=s.substr(0,s.size()-i);
start=0;
for(int j=0;j<tmp.size();j++)
{
if(tmp.size()-2*start<length)
{
break;
}
//两边向中间靠拢,如果出现不等,则起始位前移
if(tmp[j] !=tmp[tmp.size()-j-1])
{
start=j+1;
}
else
{
//比对完毕
if(tmp.size()-2*start>length && tmp.size()-1-2*j<=1 )
{
length=tmp.size()-2*start;
res=tmp.substr(start,length);
}
}
}
//如果是第一次,对称轴没有偏移,所以不用分左右
if(0==i)
{
continue;
}
//在右边找
tmp=s.substr(i,s.size()-i);
start=0;
for(int j=0;j<tmp.size();j++)
{
if(tmp.size()-2*start<length)
{
break;
}
//两边向中间靠拢,如果出现不等,则起始位前移
if(tmp[j] !=tmp[tmp.size()-j-1])
{
start=j+1;
}
else
{
//比对完毕
if(tmp.size()-2*start>length && tmp.size()-1-2*j<=1)
{
length=tmp.size()-2*start;
res=tmp.substr(start,length);
}
}
}
}
return res;
}
};
GO
func longestPalindrome(s string) string {
var res string
var tmp string
var start int
var length int
for i:=0;i<len(s);i++{
//在左边找
if len(s)-i <= length{
break
}
//截取从索引0到len(s)-1-i的子串
tmp=s[0:len(s)-i]
start=0
for j:=0;j<len(tmp);j++{
if tmp[j] !=tmp[len(tmp)-1-j]{
start=j+1;
if len(tmp)-2*start <=length{
break
}
}else{
//比对结束,更新length条件
if len(tmp)-1-2*j <=1 && length<len(tmp)-2*start{
length=len(tmp)-2*start
res=tmp[start:len(tmp)-start]
}
}
}
//在右边找
tmp=s[i:len(s)]//截取从索引i到len(s)-1的子串
start=0
for j:=0;j<len(tmp);j++{
if tmp[j] !=tmp[len(tmp)-1-j]{
start=j+1;
if len(tmp)-2*start <=length{
break
}
}else{
//比对结束,更新length条件
if len(tmp)-1-2*j <=1 && length<len(tmp)-2*start{
length=len(tmp)-2*start
res=tmp[start:len(tmp)-start]
}
}
}
}
return res
}