leetcode 20.有效的括号(valid parentheses)C语言
1.description
https://leetcode-cn.com/problems/valid-parentheses/description/
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
2.solution
bool isValid(char * s){
int len = strlen(s);
char *stack = (char*)malloc(sizeof(char)*len);
int top = -1;
for(int i=0; i<len; ++i){
if(s[i]=='[' || s[i]=='{' || s[i]=='('){
stack[++top] = s[i];
}else{
if(top == -1) return false; // 左括号已经没了,还剩下没匹配的右括号
if(s[i]==']' && stack[top]=='['){
top--;
continue;
}else if(s[i]=='}' && stack[top]=='{'){
top--;
continue;
}else if(s[i]==')' && stack[top]=='('){
top--;
continue;
}else{
free(stack);
return false; // 中途遇到一对不匹配的
}
}
}
free(stack);
return top==-1 ? true : false; // 如果栈里还有左括号,说明左括号比右括号多,返回false,否则返回true
}