由於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("沒有公共子字符串"); } }