题干:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路:
左半部分'(','['.'{'出现时,可直接入栈,右半部分出现时,不能直接入栈,当上一个栈顶和数组中的元素组成一组括号时,栈顶出栈。其他情况返回false。若最后栈为空栈时,返回ture,若不为空栈,返回false。
源码:
bool isValid(char *s){
bool ans = true;
if(s){
char *stack = (char*)malloc(strlen(s)+1);
int i = 0,top = -1;
for(i = 0;s[i];++i){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'||top == -1){
stack[++top] = s[i]; //是左半部分时,入栈
}
//输入的时右半部分,在栈非空且栈顶时对应的左半部分时出栈
//ASCII中()之间相差1,[]{}之间相差2
else if(s[i] == stack[top] + 1||s[i] == stack[top] + 2)
--top;
else{
ans = false;
break;
}
}
//结果不为空栈,不满足条件返回false
if(top != -1)
ans = false;
}
return ans;
}