Dada una cadena que solo incluye '(', ')', '{', '}', '[', ']', juzgue si la cadena es válida.
Una cadena válida debe satisfacer: el
paréntesis izquierdo debe cerrarse con el mismo tipo de paréntesis derecho.
El paréntesis de apertura debe cerrarse en el orden correcto.
Tenga en cuenta que una cadena vacía se puede considerar una cadena válida.
Ejemplo 1:
Entrada: "()"
Salida: verdadera
Ejemplo 2:
Entrada: “() [] {}”
Salida: verdadero
Ejemplo 3:
Entrada: "(]"
Salida: falso
Ejemplo 4:
Entrada: "([)]"
Salida: falso
Ejemplo 5:
Entrada: "{[]}"
Salida: verdadera
1. Solución: coloque la cadena en la pila, todos los corchetes izquierdos están en la estación, el marcador cnt se agrega 1, y luego todos los corchetes izquierdos que coinciden con el corchete derecho actual se extraen de la pila y el marcador cnt se reduce en uno; Después de completarlo, juzgue si cnt es cero, si cnt = 0, los paréntesis coinciden, de lo contrario no coinciden.
El código central es el siguiente:
//DoValid.cpp
bool DoValid(string& str) {
string tmp;
int cnt = 0;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '{' || str[i] == '[' || str[i] == '(') {
tmp.push_back(str[i]);
cnt++;
}
else if (cnt != 0 && (tmp[cnt - 1] + 1 == str[i] || tmp[cnt - 1] + 2 == str[i])) {
tmp.pop_back();
cnt--;
}
else
return false;
}
if (cnt != 0)
return false;
else
return true;
}
class Solution {
public:
bool isValid(string s) {
return DoValid(s);
}
};
2.
Fuente de comentarios : Número de pregunta de LeetCode: 20
Enlace: Soporte efectivo de LeetCode No20