62
62
63
63
递推公式如下:
64
64
65
- ![ ] ( . /images/gif.gif)
65
+ ![ ] ( https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/1100-1199/1143.Longest%20Common%20Subsequence /images/gif.gif)
66
66
67
67
<!-- tabs:start -->
68
68
@@ -77,8 +77,11 @@ class Solution:
77
77
dp = [[0 ] * (n + 1 ) for _ in range (m + 1 )]
78
78
for i in range (1 , m + 1 ):
79
79
for j in range (1 , n + 1 ):
80
- dp[i][j] = dp[i - 1 ][j - 1 ] + 1 if text1[i - 1 ] == text2[j - 1 ] else max (dp[i - 1 ][j], dp[i][j - 1 ])
81
- return dp[m][n]
80
+ if text1[i - 1 ] == text2[j - 1 ]:
81
+ dp[i][j] = dp[i - 1 ][j - 1 ] + 1
82
+ else :
83
+ dp[i][j] = max (dp[i - 1 ][j], dp[i][j - 1 ])
84
+ return dp[- 1 ][- 1 ]
82
85
```
83
86
84
87
### ** Java**
@@ -92,15 +95,69 @@ class Solution {
92
95
int [][] dp = new int [m + 1 ][n + 1 ];
93
96
for (int i = 1 ; i <= m; ++ i) {
94
97
for (int j = 1 ; j <= n; ++ j) {
95
- char c1 = text1. charAt(i - 1 ), c2 = text2. charAt(j - 1 );
96
- dp[i][j] = c1 == c2 ? dp[i - 1 ][j - 1 ] + 1 : Math . max(dp[i - 1 ][j], dp[i][j - 1 ]);
98
+ if (text1. charAt(i - 1 ) == text2. charAt(j - 1 )) {
99
+ dp[i][j] = dp[i - 1 ][j - 1 ] + 1 ;
100
+ } else {
101
+ dp[i][j] = Math . max(dp[i - 1 ][j], dp[i][j - 1 ]);
102
+ }
97
103
}
98
104
}
99
105
return dp[m][n];
100
106
}
101
107
}
102
108
```
103
109
110
+ ### ** C++**
111
+
112
+ ``` cpp
113
+ class Solution {
114
+ public:
115
+ int longestCommonSubsequence(string text1, string text2) {
116
+ int m = text1.size(), n = text2.size();
117
+ vector<vector<int >> dp(m + 1, vector<int >(n + 1));
118
+ for (int i = 1; i <= m; ++i) {
119
+ for (int j = 1; j <= n; ++j) {
120
+ if (text1[ i - 1] == text2[ j - 1] ) {
121
+ dp[ i] [ j ] = dp[ i - 1] [ j - 1 ] + 1;
122
+ } else {
123
+ dp[ i] [ j ] = max(dp[ i - 1] [ j ] , dp[ i] [ j - 1 ] );
124
+ }
125
+ }
126
+ }
127
+ return dp[ m] [ n ] ;
128
+ }
129
+ };
130
+ ```
131
+
132
+ ### **Go**
133
+
134
+ ```go
135
+ func longestCommonSubsequence(text1 string, text2 string) int {
136
+ m, n := len(text1), len(text2)
137
+ dp := make([][]int, m+1)
138
+ for i := 0; i <= m; i++ {
139
+ dp[i] = make([]int, n+1)
140
+ }
141
+ for i := 1; i <= m; i++ {
142
+ for j := 1; j <= n; j++ {
143
+ if text1[i-1] == text2[j-1] {
144
+ dp[i][j] = dp[i-1][j-1] + 1
145
+ } else {
146
+ dp[i][j] = max(dp[i-1][j], dp[i][j-1])
147
+ }
148
+ }
149
+ }
150
+ return dp[m][n]
151
+ }
152
+
153
+ func max(a, b int) int {
154
+ if a > b {
155
+ return a
156
+ }
157
+ return b
158
+ }
159
+ ```
160
+
104
161
### ** ...**
105
162
106
163
```
0 commit comments