2017藍橋杯最大公共子串(C B組)

2021-08-17 06:33:04 字數 990 閱讀 5082

題目:

最大公共子串長度問題就是:

求兩個串的所有子串中能夠匹配上的最大長度是多少。

比如:"abcdkkk" 和 "baabcdadabc",

可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。

下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。

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

#include

#include

#define n 256

int f(const char* s1, const char* s2)}}

return max;

}int main()

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

解析:

剛開始挺納悶的,這種問題太簡單了, 為啥要用矩陣增加其難度呢,本來設定乙個常規變數注意好初始化和改變的位置就行了,如果這個問題是程式設計題,我相信99%的人可以很快做出來,當我剛看到這道題的時候,我想,難道還需要利用陣列下標賦值字元麼,這是一種什麼思維,後來毛瑟頓開,該程式一開始利用memset函式將臨時陣列的全部元素都初始化為0,這是乙個訊號,乙個非常重要的訊號,後來又用雙重for迴圈遍歷全部陣列元素,細心的同學或許注意到了一點,兩個for語句都是從 1 迴圈的,並不是從陣列本有特性 0 開始迴圈,這又是乙個訊號(如果不這樣做,關鍵的一句**就會造成陣列越界),它要利用字串的特性-具有連線性並且結合臨時陣列全部為0的特性更簡單更高效的把最大公共子串的長度給求出來!

#include

#include

#define n 256

int f(const char* s1, const char* s2)}}

return max;

}int main()

藍橋杯 最大公共子串

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

藍橋杯 最大公共子串

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

最大公共子串行,最大公共子串,最大回文子串

1 兩個字串中最長公共子串行 該問題是動態規劃的經典問題,找出的公共序列不一定是連續的,參考資料很多,這裡就貼出公式和 做個簡單的筆記。設序列a,b的長度分別為n和m,l i,j 為a i b j 的最長公共子串行長度,有遞推公式 時間複雜度為o mn 如下 define n 50 intlcs c...