c++动态规划法求最长公共子串
时间: 2023-10-11 21:10:58 浏览: 67
用动态规划思想求解最长公共子串
4星 · 用户满意度95%
最长公共子串是指两个字符串中相同的最长长度的子串。可以使用动态规划来解决这个问题。
首先定义一个二维数组dp[i][j],表示以第一个字符串i位置结尾和第二个字符串j位置结尾的最长公共子串的长度。则状态转移方程为:
```
if (s1[i - 1] == s2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = 0;
}
```
其中,s1和s2分别为两个字符串,dp[i][j]表示以s1的第i个字符和s2的第j个字符结尾的最长公共子串的长度。
最终的结果为dp数组中的最大值。
下面是C++代码实现:
```cpp
int longestCommonSubstring(string s1, string s2) {
int m = s1.size();
int n = s2.size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
int maxLen = 0;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s1[i - 1] == s2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
maxLen = max(maxLen, dp[i][j]);
} else {
dp[i][j] = 0;
}
}
}
return maxLen;
}
```
阅读全文