征战蓝桥 —— 2017年第八届 —— C/C++A组第6题——最大公共子串
生活随笔
收集整理的這篇文章主要介紹了
征战蓝桥 —— 2017年第八届 —— C/C++A组第6题——最大公共子串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
最大公共子串長度問題就是:
求兩個串的所有子串中能夠匹配上的最大長度是多少。
比如:“abcdkkk” 和 “baabcdadabc”,
可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。
下面的程序是采用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。
請分析該解法的思路,并補全劃線部分缺失的代碼。
#include <stdio.h> #include <string.h>#define N 256 int f(const char* s1, const char* s2) {int a[N][N];int len1 = strlen(s1);int len2 = strlen(s2);int i,j;memset(a,0,sizeof(int)*N*N);int max = 0;for(i=1; i<=len1; i++){for(j=1; j<=len2; j++){if(s1[i-1]==s2[j-1]) {a[i][j] = __________________________; //填空if(a[i][j] > max) max = a[i][j];}}}return max; }int main() {printf("%d\n", f("abcdkkk", "baabcdadabc"));return 0; }注意:只提交缺少的代碼,不要提交已有的代碼和符號。也不要提交說明性文字。
代碼
#include <stdio.h> #include <string.h>#define N 256 int f(const char* s1, const char* s2) {int a[N][N];int len1 = strlen(s1);int len2 = strlen(s2);int i,j;memset(a,0,sizeof(int)*N*N);int max = 0;for(i=1; i<=len1; i++){for(j=1; j<=len2; j++){if(s1[i-1]==s2[j-1]) {a[i][j] = a[i-1][j-1]+1; //填空if(a[i][j] > max) max = a[i][j];}}}return max; }int main() {printf("%d\n", f("abefecd", "becd"));return 0; }總結
以上是生活随笔為你收集整理的征战蓝桥 —— 2017年第八届 —— C/C++A组第6题——最大公共子串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017/Province_C_C++_
- 下一篇: 征战蓝桥 —— 2017年第八届 ——