https://leetcode-cn.com/problems/longest-common-subsequence/
Dadas las dos cadenas text1 y text2, devuelve la subsecuencia común más larga de las dos cadenas.
Una subsecuencia de una cadena de caracteres se refiere a una nueva cadena de caracteres: es una nueva cadena de caracteres formada al eliminar algunos caracteres (o no eliminar ningún carácter) sin cambiar el orden relativo de los caracteres.
Por ejemplo, "as" es una subsecuencia de "abcde", pero "aec" no es una subsecuencia de "abcde". La "subsecuencia común" de las dos cadenas de caracteres es la subsecuencia compartida por las dos cadenas de caracteres.
Si no hay subsecuencia común para estas dos cadenas, se devuelve 0.
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int size1 = text1.size(), size2 = text2.size();
int c[size1 + 1][size2 + 1];
for (int k = 0; k <= size1; ++k) {
c[k][0] = 0;
}
for (int k = 0; k <= size2; ++k) {
c[0][k] = 0;
}
for (int i = 1; i <= size1; ++i) {
for (int j = 1; j <= size2; ++j) {
if(text1[i - 1] == text2[j - 1]) {
c[i][j] = c[i - 1][j - 1] + 1;
} else if(c[i - 1][j] < c[i][j - 1]) {
c[i][j] = c[i][j - 1];
} else {
c[i][j] = c[i - 1][j];
}
}
}
return c[size1][size2];
}
};
int main() {
Solution s;
cout << s.longestCommonSubsequence("abcde", "ace");
}