演算法 動態規劃(4)最長公共子串 C

2021-10-03 00:13:03 字數 945 閱讀 8568

動態規劃(0)-字串的交錯組成,二維表呈現的是,str1,str2 ,aim三個字串的關係,那麼本篇最長公共子串就是只是str1,str2兩個字串的關係。

問題:給定兩個字串,返回兩個字串的最長公共子串。

舉例:str1="1ab2345cd",str2="12345ef",返回「2345」

思路:dp 表示 把str1[i]和str2[j] 當作公共子串最後乙個字元時,公共子串最大長度。

二維表仍然是 str1 row i 行  dp[i][0]

str2 col  j  列  dp[0][j]

步驟:1.得到dp

1.1dp[0][0]=true;

1.2.第一列col  dp[i][0]=  str1[i]==str2[0]   

1.3.第一行row dp[0][j]=  str2[i]==str1[0] 

1.4.dp[i][j]   

1.4.1相等 前串+1 str1[i]==str2[j]  dp[i][j]=dp[i-1][j-1]+1;

1.4.2 不等 為0       str1[i]!=str2[j]  dp[i][j]=0;

2.取dp值 

3.擷取子串

using namespace std;

typedef vector> ivv;

//14:30

//dp 建立的時候 +1

str1[i] == str2[0] i=1 m_max)

} }}

void strarrcommon_main()

} } 或者str2擷取子串

string strre;

strre=str1.substr(m_end - m_max + 1, m_end + 1);

cout << strre << endl;

}

演算法 動態規劃(4)最長公共子串 C

動態規劃 0 字串的交錯組成,二維表呈現的是,str1,str2 aim三個字串的關係,那麼本篇最長公共子串就是只是str1,str2兩個字串的關係。問題 給定兩個字串,返回兩個字串的最長公共子串。舉例 str1 1ab2345cd str2 12345ef 返回 2345 思路 dp 表示 把st...

最長公共子串 最長公共子串 動態規劃

有兩個字串 可能包含空格 請找出其中最長的公共連續子串,輸出其長度。長度在1000以內 例如 輸入 abcde bcd 輸出 3 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。3 通過查詢出值為1的最長對角線就能找到最長公...

最長公共子串(動態規劃)

描述 計算兩個字串的最大公共子串 longest common substring 的長度,字元不區分大小寫。輸入 輸入兩個字串 輸出 輸出乙個整數 樣例輸入 asdfas werasdfaswer樣例輸出 6 參考 這裡的最大公共字串要求的字串是連續的。求字串的方法和求子序列方法類似 當s i t...