135、程式設計實現:找出兩個字串中最大公共子字串,如"abccade","dgcadde"的最大子串為 "cad"
阿新 • • 發佈:2019-02-20
35、程式設計實現:找出兩個字串中最大公共子字串,如"abccade","dgcadde"的最大子串為
"cad"
/* 35、程式設計實現:找出兩個字串中最大公共子字串,如"abccade","dgcadde"的最大子串為 "cad" 不同於56的最長公共子串 DP題演算法導論上有: c[i,j]=0 i=0||j=0 =c[i-1,j-1]+1 a[i]==a[j] =max(c[i-1,j],c[i,j-1]) a[i]!=a[j] 本題 就是迴圈列舉 */ #include<iostream> #include<stdio.h> #include<cmath> #include<algorithm> using namespace std; int GetCommon(char s1[], char s2[]) { int len1=strlen(s1); int len2=strlen(s2); int r,maxlen=0; for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { if(s1[i]==s2[j]) { int as=i,bs=j,count=1; while(as+1<len1&&bs+1<len2 &&s1[++as]==s2[++bs]) count++; if(count>maxlen) { maxlen = count; r=i; } } } } for(int i=r;i<r+maxlen;i++) printf("%c",s1[i]); printf("\n"); return maxlen; } int main() { char a[]={"abccade"}; char b[]={"dgcadde"}; printf("%s和%s的最長公共子串是:\n",a,b); printf("長度為:%d\n",GetCommon(a,b)); return 0; }