emmm还在理解
大概懂了转移方法 但是细节还不太懂
1 string longestPalindrome(string ss) 2 { 3 string s="#"; 4 for(auto i:ss) 5 { 6 s+=i; 7 s+="#"; 8 } 9 int c=0,r=0; 10 vector<int>p(s.size(),0); 11 for(int i=0;i<s.size();i++) 12 { 13 if(r>i) p[i]=min(r-i,p[2*c-i]); 14 while((i-1-p[i])>=0 15 &&(i+1+p[i])<s.size() 16 &&s[i+1+p[i]]==s[i-1-p[i]]) 17 p[i]++; 18 if(i+p[i]>r) 19 { 20 r=i+p[i]; 21 c=i; 22 } 23 } 24 int ans=0,mid=0; 25 for(int i=0;i<s.size();i++) 26 { 27 if(p[i]>ans) 28 { 29 ans=p[i]; 30 mid=i; 31 } 32 } 33 return ss.substr((mid-ans)/2,ans); 34 }