標籤:
由於python中的for迴圈不像C++這麼靈活,因此該用枚舉法實現該演算法:
C="abcdefhe"D="cdefghe"m=0n=len(C)E=[]b=0while(m<n): i=n-m while(i>=0): E.append(C[m:m+i]) i-=1 m+=1for x in E: a=0 if x in D: a=len(x) c=E.index(x) if a > b:#儲存符合要求的最長字串長度和地址 b=a d=cif 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("沒有公用子字串"); }}
【python】執行個體-python實現兩個字串中最大的公用子串