状态转移方程为:
- 当s1[i] = s2[j]时:
- 当s1[i] != s2[j]时:
// runtime: 4ms // space: 504K // complexity: O(m*n) #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int MAX = 1001; string s1; string s2; //int dp[MAX][MAX]; // 也可以使用全局二维数组,并且自动初始化为所有元素都是0。 int main() { while (cin >> s1 >> s2) { int n = s1.length(); int m = s2. length(); int dp[n + 1][m + 1]; memset(dp, 0, sizeof(dp)); // 在头文件<cstring>里。 for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { if (s1[i - 1] == s2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; } else { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } } } cout<< dp[n][m] << endl; } return 0; }