示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
分析:
左边进栈,右边出栈
括号是成对出现,所以不能出现奇数情况
当是左括号时,要对括号进行匹配
栈顶元素为0或者左右不等的情况下返回false
/**
左括号进栈
右括号出栈
*/
// 1、设置3种括号
char SetKuoHao(char a){
if(a=='(') return ')';
if(a=='[') return ']';
if(a=='{') return '}';
return NULL;
}
// 2、检查是否左右匹配
bool isValid(char* s) {
// 设置栈顶元素
int top=0;
if(strlen(s)%2!=0) return false;
for (int i = 0; i<strlen(s); i++) {
if (s[i] == '(' || s[i] == '[' || s[i]== '{') {
s[top++] = SetKuoHao(s[i]);
} else if (top == 0 || s[--top] != s[i]) {
return false; // 没有左括号,或者左括号类型不对
}
}
return !top;
}