P1210 [USACO1.3] 最长的回文 Calf Flac
题目链接
包含标点符号、空格的字符串,再只考虑字母的条件下求最长回文串
转化为只含有小写字母的字符串,利用map映射俩字符串的坐标,再进行操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| for(int i=1;i<=n;i++){ if(isalpha(c[i])){ d[++m]=tolower(c[i]); mp[m]=i; } }
int l,r; void check(int e){ int a=1; for(int i=1;d[e-j]==d[e+j];i++){ if(e-j<1)break; if(e+j>m)break; a+=2; } int b=0; for(int i=1;d[e-j]==d[e+j+1];i++){ if(e-j<1)break; if(e+j+1>m)break; b+=2; } int t=max(a,b); if(t>ans){ ans=t; l=e-ans/2; if(ans%2==0)l++; r=e+ans/2; } }
|