fenl 发表于 2015-12-3 11:52:26

【python】实例-python实现两个字符串中最大的公共子串

  由于python中的for循环不像C++这么灵活,因此该用枚举法实现该算法:



C="abcdefhe"
D="cdefghe"
m=0
n=len(C)
E=[]
b=0
while(m<n):
i=n-m
while(i>=0):
E.append(C)
i-=1
m+=1
for x in E:
a=0
if x in D:
a=len(x)
c=E.index(x)
if a > b:#保存符合要求的最长字符串长度和地址
b=a
d=c
if b>0:
print E

  
  
  
  
  参照C语言实现方法:



//3.定义一个求最大公共子字符串的函数
void maxChild(char str[],char str1[])
{
    //4.定义两个指针变量,用于记录相同的起始地址
    char *p,*q;
    //5.定义两个整型变量,用于保存最大公共长度
    int n=0,m=0;
    //6.通过for循环来遍历第一个字符串
    for(int i=0;i<strlen(str);i++)
    {
      //7.通过for循环遍历第二个字符串
      for(int j=0;j<strlen(str1);j++)
      {
            //8.每次比较完两个字符串的公共部分后,都设置m=0
            m = 0;
            //9.判断两个字符串起始相同,只要一有相同的,就同步进行判断
            if(str==str1&&str1!='\0'){
                //10.通过同步进行比较公共字符串
                for(int k=0;str!='\0'&&str1!='\0'&&str==str1;k++)
                {
                  //11.记录公共字符个数和第一个匹配的地址
                  m++;
                  p = &str;
                }
                if(m>n)
                {
                  //12.保存大地址,和最大个数
                  q = p;
                  n = m;
                }
            }
      }
    }
    //13.判断是否有公共子字符串
    if(n>0){
      //14.进行输出最大公共子字符串
      for(int i=0;i<n;i++){
            printf("%c",*(q+i));
      }
    }else{
      printf("没有公共子字符串");
    }
}

  
页: [1]
查看完整版本: 【python】实例-python实现两个字符串中最大的公共子串