A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© keycola 中级黑马   /  2014-12-10 15:26  /  1131 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何求出多个字符串的公共子串

如 abcdef
     defkg

公共子串就是 def

2 个回复

倒序浏览
  1. #include<stdio.h>
  2. #include<string.h>

  3. void main()
  4. {
  5. char  a[500],b[500];
  6. int array[500][500];
  7. int aLen,bLen;
  8. int i,j,max,m,n;
  9. printf("请输入第一个字符串:");
  10.     while(scanf("%s",&a)!=EOF)   //如果成功
  11.         {
  12.       printf("请输入第二个字符串:");
  13.       scanf("%s",&b);
  14.       aLen=strlen(a);
  15.       bLen=strlen(b);
  16.       for(i=0;i<bLen+1;i++)
  17.       array[i][0]=0;
  18.       for(i=0;i<aLen+1;i++)
  19.       array[0][i]=0;
  20.   
  21.      for(i=1;i<=aLen;i++)         //二维数组赋值
  22.          {
  23.             for(j=1;j<=bLen;j++)     //i行j列
  24.                 {
  25.          if(a[i-1]==b[j-1])
  26.                  {
  27.             array[i][j]=array[i-1][j-1]+1;
  28.                  }
  29.          else
  30.                  {
  31.                     array[i][j]=0;

  32.                  }
  33.                 }
  34.    
  35.          }
  36.    //输出公共字符串
  37.          max=array[0][0];
  38.          for(i=1;i<=aLen;i++)
  39.          {
  40.                  for(j=1;j<=bLen;j++)
  41.                  {
  42.            if(max<array[i][j])
  43.                    {
  44.                            max=array[i][j];
  45.                            m=i;
  46.                            n=j;
  47.                    }
  48.                  }
  49.          }
  50.          //printf("重复最大个数max:%d 行下标m: %d 列下标n:%d",max,m,n);
  51.          printf("最大子串为:");
  52.                   for(i=m-max;i<m;i++)
  53.                  {
  54.               printf("%c",a[i]);  
  55.                  }
  56.    
  57.    printf("\n");
  58. }
  59. }
复制代码
回复 使用道具 举报
arui12580 来自手机 中级黑马 2014-12-10 15:49:23
藤椅
那个,这是LCS算法问题。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马