Paréntesis válido
Directorio de artículos
Titulo
Incluye solo un hecho (
, )
, {
, }
, [
, ]
cadena, determina si la cadena es válida.
Una cadena válida debe cumplir:
- El soporte izquierdo debe cerrarse con el mismo tipo de soporte derecho.
- El soporte izquierdo debe cerrarse en el orden correcto.
Tenga en cuenta que una cadena vacía puede considerarse una cadena válida.
Ejemplo 1:
输入: "()"
输出: true
Ejemplo 2
输入: "()[]{}"
输出: true
Ejemplo 3
输入: "(]"
输出: false
Ejemplo 4
输入: "([)]"
输出: false
Ejemplo 5:
输入: "{[]}"
输出: true
Prototipo de función
Prototipo de función C:
bool isValid(char * s){}
Juicio de límites
bool isValid(char * s){
if( s == NULL || *s == '\0' )
return true;
}
Diseño de algoritmo: pila
Ideas: Si usted tiene la mitad izquierda de los soportes (como por ejemplo
(
,,[
){
en la pila, la mitad derecha de los soportes de la cara (como por ejemplo)
,,]
)}
y la parte superior de los elementos de la pila pueden igualar (es un par de paréntesis), entonces la pila, que se repite este Proceso ... Al final, la pila vacía es paréntesis válidos. Si todavía hay paréntesis en la pila, significa que no hay una coincidencia perfecta.
bool isValid(char * s){
if( s == NULL || *s == '\0' ) // 题目说:空字符串可被认为是有效字符串。
return true;
int len = strlen(s);
if ( !len ) return true;
char stack[len];
int top = -1;
for (int i = 0; i < len; ++i) {
if (top > -1 && ((stack[top] == '(' && s[i] == ')') || (stack[top] == '[' && s[i] == ']') || (stack[top] == '{' && s[i] == '}'))) {
top--;
} else {
stack[++top] = s[i];
}
}
return top == -1 ? true:false;
}