您的位置:首页 > 其它

1040. Longest Symmetric String (25)

2016-03-12 19:31 330 查看
假设s[0..n]的longest symmetric string的max characters已求出,且知道s[start..n]为symmetric string,若想知道加入第n+1个字符后是否改变max值,只需知道s[start-1..n+1]或s[start..n+1]是否是symmetric string,并求出start值使s[start..n+1]为symmetric string,为下一步准备。

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

#include <cstdio>
#include <cstring>
char s[1001];
int max;
int start;    //从start下标开始到当前位置的substring为symmetric string
bool symm(int i,int j){    //判断是否对称
for(int k=i;k<=(i+j)/2;k++)
if(s[k]!=s[i+j-k]) return false;
return true;
}
void find(int k){
if(start && symm(start-1,k)) start--;
int i;
for(i=start;s[i]!=s[k] || !symm(i,k);i++)
;
start=i;
if(k-start+1>max) max=k-start+1;
}
int main(){
gets(s);
max=1;
start=0;
for(int i=1;i<strlen(s);i++)
find(i);
printf("%d",max);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pat