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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM