Programación dinámica subsecuencia más larga

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");
}
202 artículos originales publicados · Me gusta 13 · Visitante 7432

Supongo que te gusta

Origin blog.csdn.net/qq_43410618/article/details/105504100
Recomendado
Clasificación