Tabla de contenido
¿Cómo aprender programación dinámica?
2. Ecuación de transición de estado
¿Cómo aprender programación dinámica?
No hay atajos para aprender un algoritmo, y mucho menos aprender programación dinámica,
¡Repasen conmigo las preguntas sobre algoritmos de programación dinámica y aprendan programación dinámica juntos!
1. Análisis del tema
Enlace temático: 139. División de palabras - LeetCode
El tema es fácil de entender, solo danos un diccionario,
Vea si puede empalmar las cadenas en el diccionario en la cadena de destino que le dio.
2. Principio del algoritmo
1. Representación de estado
dp[ i ] indica si la cadena desde el punto de inicio hasta dp[ i ] puede ser concatenada por las cadenas en el diccionario,
Si el logro es verdadero, de lo contrario es falso
2. Ecuación de transición de estado
Divide el problema según la situación de la última posición,
Podemos dividirlo en dos intervalos para el análisis,
¿Se puede empalmar con éxito la sección izquierda? ¿Es el intervalo correcto una cadena en el diccionario?
Entonces nuestra ecuación de transición de estado es:
El intervalo de la izquierda == verdadero && el intervalo de la derecha existe en el diccionario, de lo contrario es falso
3. Inicialización
Para evitar cruzar la frontera, agregue un nodo de cabeza virtual.
4. Orden de llenado
De izquierda a derecha.
5. Valor de retorno
Devuelve la última posición de la tabla dp
3. Escritura de código
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> st;
for(auto e : wordDict) st.insert(e);
vector<bool> dp(s.size() + 1);
dp[0] = true;
for(int i = 0; i <= s.size(); i++) {
for(int j = 0; j < i; j++) {
if(dp[j] && st.find(s.substr(j, i - j)) != st.end()) {
dp[i] = true;
break;
}
}
}
return dp[s.size()];
}
};
Escribe al final:
Lo anterior es el contenido de este artículo, gracias por leer.
Si sientes que has ganado algo, puedes darle un me gusta al blogger .
Si hay omisiones o errores en el contenido del artículo, envíe un mensaje privado al blogger o indíquelo en el área de comentarios ~