共鸣 专注 灌输
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
思路分析:
1.利用栈存取左括号,遇到右括号则栈顶出栈看是否匹配,分析各种情况返回结果
2.利用哈希表:键为右括号,值为左括号,通过栈顶元素与哈希表返回值的对照,完成判断
char pairs(char a) { //哈希表保存右括号的值
if (a == '}') return '{';
if (a == ']') return '[';
if (a == ')') return '(';
return 0;
}
bool isValid(char* s) {
int n = strlen(s);
if (n % 2 == 1) {
return false;
}
int stk[n + 1], top = 0; //设置存储左括号的栈
for (int i = 0; i < n; i++) {
char ch = pairs(s[i]);
if (ch) {
if (top == 0 || stk[top - 1] != ch) {
return false;
}
top--;
} else {
stk[top++] = s[i];
}
}
return top == 0;
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路分析:
1.需提前知道三种括号在ASCII码表中的位置关系,较难实现,查表知()分别是40和41;[ ]分别是91和93;{ }分别是123和125。
2.从stack1[ 1 ]开始存储数据,结束时应该指向stack1[ 0 ]
bool isValid(char * s){
char* stack1[100001];
int top1 = 0;
int length = 0;
while(*(s+length))length++;
for(int i = 0; i < length; i++){
if((*(s+i) == '(') || (*(s+i) == '{' || (*(s+i) == '[')))
{
stack1[++top1] = *(s+i);
}
else if((*(s+i) == (stack1[top1]+1)) || (*(s+i) == (stack1[top1]+ 2)))
{
top1--;
}
else return 0;
}
if(top1)
return 0;
return 1;
}
作者:zhangquanwei
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/cyu-yan-li-mian-shi-jian-100-by-zhangqua-x7jg/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路分析:
在读取左括号时直接将对应右括号存入栈中,之后直接将右括号比较出栈即可。
bool isValid(char * s){
char* stack = (char*)calloc(10000, sizeof(char));
int i = 0, size = -1;
while (i < strlen(s)) {
if (s[i] == '(') {
stack[++size] = ')';
} else if (s[i] == '[') {
stack[++size] = ']';
} else if (s[i] == '{') {
stack[++size] = '}';
} else if (size == -1 || stack[size] != s[i]) {
return false;
} else {
size--;
}
i++;
}
return size == -1;
}
作者:dyzahng
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/20-you-xiao-de-gua-hao-by-dyzahng-rjeu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。