由中心向两边扩展法。时间复杂度为O(n^2),空间复杂度为O(1)
#include<string>
#include<iostream>
using namespace std;
string getString(string str,int l,int r){
int n=str.length();
while(l>=0&&r<=n-1&&str[l]==str[r]){
l--;
r++;
}
return str.substr(l+1,r-l-1);
}
string IsPalindrome(string str){
int n=str.length();
if(str==""){
return "";
}
string longest=str.substr(0,1);
for(int i=0;i<n-1;i++){
string p1=getString(str,i,i);
if(p1.length()>longest.length()){
longest=p1;
}
string p2=getString(str,i,i+1);
if(p2.length()>longest.length()){
longest=p2;
}
}
return longest;
}
int main(){
string str="djdslkAABCDEAfjdl1234321skjflkdsjfkldsababasdlkfjsdwieowowwpw";
string s=IsPalindrome(str);
cout<<s<<endl;
return 0;
}