(2016 1)求最大公共字串長度

2021-09-11 11:31:40 字數 717 閱讀 4147

給定兩個字串,求最大公共字串的長度,長度小於1000

分為兩種問題:要求計算連續最長字串的長度;或者不連續

如下按照尋找連續的字串理解

輸入:

1111hello2222

1133hello444

輸出:

5
暴力解法:使用兩個for迴圈,用第乙個字串依次去匹配第二個,不斷更新最大字串長度

dp:建立二維陣列 dp[n][n] ,令dp[i][j] 表示str1[0...i]和str2[0...j]中連續相等最大字串的長度,不斷更新ans

當str1[i]!=str2[j],令dp[i][j]==0;

當str1[i]==str2[j],dp[i][j]=dp[i-1][j-1]+1;

對於數字的第一行和第一列,由於最長的公共字串長度為1,所以只要出現字元相等,就令n=1

#include #include #include #include using namespace std;

const int n = 1000;

int dp[n][n] = ;

int main()

else if(i == 0 || j == 0)

else}}

}cout << ans << endl;

return 0;

}

最大公共字串

簡單dp問題 設兩個字串s1,s2,假設dp i j 代表到s1的第i個字元及s2的第j個字元時,最大公共字串的數目 那麼 if s1 i s2 j dp i j d i 1 j 1 1 else dp i j 0 如下 dp二維陣列空間是可以優化的,可以變成一位陣列.dp是個二維矩陣,舉例如下 a...

最大公共字串

最簡單的方法就是依次比較,以某個串為母串,然後生成另乙個串的所有長度的子串,依次去母串中比較查詢,這裡可以採用先從最長的子串開始,減少比較次數,但是複雜度依然很高!然後重新看一下這個問題,我們建立乙個比較矩陣來比較兩個字串str1和str2 定義lcs i,j 當str1 i str2 j 時lcs...

最大公共字串

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