LeetCode 5.最长回文字符串
给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
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;}
};