藍橋杯 最大公共子串(第八屆第六題)

2021-09-12 10:08:50 字數 893 閱讀 9295

請分析該解法的思路,並補全劃線部分缺失的**。

#include

#include

#define n 256

intf

(const

char

* s1,

const

char

* s2)}}

return max;

}int

main()

注意:只提交缺少的**,不要提交已有的**和符號。也不要提交說明性文字。

結果:a[i-1][j-1]+1分析:a[i][j]表示兩個字串的第i位和第j位上連續匹配的字元個數,如果i和j不匹配,a[i][j]為0,匹配則在a[i-1][j-1]的基礎上加1。把兩個字串分別以行列組成乙個二維矩陣,比如str=acbcbcef,str2=abcbced,我們可以得到下面的矩陣,比較二維矩陣每個點對應行列是否相等,相等設為1否則為0,查詢出值為1的最長對角線長度就能得到最長公共子串。

為了進一步優化演算法的效率,我們可以再計算某個二維矩陣的值的時候順便計算出來當前最長的公共子串的長度,即某個二維矩陣元素的值由a[i][j]=1演變為a[i][j]=a[i-1][j-1]+1,這樣就避免了後續查詢對角線長度的操作了。修改後的二維矩陣如下

參考:

第八屆藍橋杯第六題最大公共子串

題目如下 最大公共子串長度問題就是 求兩個串的所有子串中能夠匹配上的最大長度是多少。比如 abcdkkk 和 baabcdadabc 可以找到的最長的公共子串是 abcd 所以最大公共子串長度為4。下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。請分析該解法的思路,並補全...

第八屆藍橋杯第六題 最大公共子串(C語言)

最大公共子串長度問題就是 求兩個串的所有子串中能夠匹配上的最大長度是多少。比如 abcdkkk 和 baabcdadabc 可以找到的最長的公共子串是 abcd 所以最大公共子串長度為4。下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。請分析該解法的思路,並補全劃線部分缺...

第八屆藍橋杯 最大公共子串

最大公共子串長度問題就是 求兩個串的所有子串中能夠匹配上的最大長度是多少。比如 abcdkkk 和 baabcdadabc 可以找到的最長的公共子串是 abcd 所以最大公共子串長度為4。下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。請分析該解法的思路,並補全劃線部分缺...