zhangas

Pay more attention

0%

7.31SDKDACM

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
//坐标映射 只需要处理数组d
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++;//!!如果字符串的长度是偶数 除以2之后应该加上1 #3 WA
r=e+ans/2;
}
}