给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
cpp
class Solution {
public:
string longestPalindrome(string s) {
char a[1005];
int lmax=0;
int l=int(size(s));
int lpos=-1;
map<char,vector<int>> mp;
for(int i=0;i<l;i++){
//cout<<"第"<<i<<endl;
a[i]=s[i];
if(mp[s[i]].empty()){
//cout<<"未出现过,记录入"<<s[i]<<endl;
mp[s[i]].push_back(i);
}
else{
for(int j=0;j<int(mp[s[i]].size());j++){
int x=(i-mp[s[i]][j]-1)/2;
int ri=i,le=mp[s[i]][j];
int flag=0;
while(x>0){
//cout<<"正在检测:"<<a[le+x]<<" "<<le+x<<" "<<a[ri-x]<<" "<<ri-x<<endl;
if(a[le+x]!=a[ri-x]){
flag=1;
break;
}
x--;
}
if(flag==0){
//cout<<i<<" "<<"发现回文"<<i<<" "<<mp[s[i]][j]<<" "<<s[i]<<endl;
if(lmax<=i-mp[s[i]][j]){
lmax=max(lmax,i-mp[s[i]][j]+1);
lpos=mp[s[i]][j];
}
}
}
mp[s[i]].push_back(i);
}
}
string str;
if(lpos==-1){
str=s[0];
}
else{
str=s.substr(lpos,lmax);
}
return str;
}
};