poj1159 最大公共子串

 1 #include<stdio.h>
 2 #include<string.h>
 3 main()
 4 {
 5       int a[2][5003],n,len;
 6       char s[5003];
 7       while(~scanf("%d",&n))
 8       {
 9            scanf("%s",s);
10            len=strlen(s);
11            memset(a,0,sizeof(a));
12            for(int i=1;i<=len;i++)for(int j=1;j<=len;j++)
13            {
14               if(s[i-1]==s[len-j])a[i%2][j]=a[(i-1)%2][j-1]+1;//注意这里 只有这个条件成立才可以赋值 否则 不应该有值   此题使用滚动数组
15               else a[i%2][j]=a[i%2][j-1]>a[(i-1)%2][j]?a[i%2][j-1]:a[(i-1)%2][j];
16            }
17            printf("%d\n",len-a[len%2][len]);
18            memset(s,0,sizeof(s));
19       }
20 }

 

posted on 2013-06-29 19:55  dokc  阅读(264)  评论(0编辑  收藏  举报

导航