题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入: s = “()”
输出: true
示例 2:
输入: s = “()[]{}”
输出: true
示例 3:
输入: s = “(]”
输出: false
示例 4:
输入: s = “([)]”
输出: false
示例 5
输入: s = “{[]}”
输出: true
提示:
- 1 1 1 <= s.length <= 1 0 4 10^4 104
- s 仅由括号 ‘()[]{}’ 组成
代码
#define MAXSIZE 10000
bool check(char c1, char c2){
if(c1 == '(' && c2 == ')'){
return true;
}
else if(c1 == '[' && c2 == ']'){
return true;
}
else if(c1 == '{' && c2 == '}'){
return true;
}
return false;
}
bool isValid(char * s){
int top = -1;
char stack[MAXSIZE];
int i = 0;
while(s[i] != '\0'){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
stack[++top] = s[i];
}
else if(s[i] == ')' || s[i] == ']' || s[i] == '}'){
if(top == -1 || !check(stack[top--], s[i])){//“top == -1”一定要在前面
return false;
}
}
i++;
}
if(top != -1){
return false;
}
return true;
}