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