由于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[m:m+i]) 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[d]
参照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[i]==str1[j]&&str1[j]!=‘\0‘){ //10.通过同步进行比较公共字符串 for(int k=0;str[k+i]!=‘\0‘&&str1[k+j]!=‘\0‘&&str[k+i]==str1[k+j];k++) { //11.记录公共字符个数和第一个匹配的地址 m++; p = &str[i]; } 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("没有公共子字符串"); } }
时间: 2024-11-08 21:01:21