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 }