注意区分啊~这里求的的事公共子串不是子序列。NOJ308-Substring

来源:互联网 发布:js获取div title属性 编辑:程序博客网 时间:2024/05/16 08:27

   求公共子序列的思路:

  假设A 串;B串,当第一个字符相等时就等于lena-1,lenb-1 的公共子序列的个数加一,当不相同的时候就是等于max(lena-1和lenb的公共,lena和lenb-1的公共)

所以就可以等到一个状态转移方程式。

而求公共子串的时候只要变一下就可以了。而下面就是求公共子串的。可以意会一下。

点击打开链接

 #include <stdio.h>#include <string.h>int main(){    char a[105],b[105],c[105][105];    int t;    scanf("%d", &t);    while(t--)    {        memset(c,0,sizeof(c));               scanf("%s",a);        int len=strlen(a);        for(int i =0; i<len;i++)          b[i]=a[len-1-i];         int max=-9999,ok;         for(int i =1;i<=len;i++)         {             for(int j =1; j<=len;j++)             {                 if(a[i-1]==b[j-1])                 {                     c[i][j]=c[i-1][j-1]+1;                 }                 if(max<c[i][j])                 {                   max=c[i][j];                   ok=i;  //记录下重点的下边再重新把它倒数。                 }             }         }             for(int i=ok-max;i<ok;i++)  //因为要围城是0,所以是从1开始的然后就是当道i时其实是i-1的;             printf("%c",a[i]);             puts("");    }    return 0;}