题目
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例及提示
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码(C语言)
#include<stdio.h>
#include<string.h>
#include <stdbool.h>
char pairs(char a) {
if (a == '{') return '}';
if (a == '[') return ']';
if (a == '(') return ')';
return 0;
}
bool isValid(char * s){
// printf("%d\n",strlen(s));
int stk[strlen(s)+1];
int top=0;
if(strlen(s)%2==1){
return false;
}
else{
for(int i=0;i<strlen(s);i++){
if(s[i]=='('||s[i]=='['||s[i]=='{'){
stk[top]=pairs(s[i]);
top++;
}
else{
if(s[i]!=stk[top-1]){
return false;
}
top--;
}
// printf("%d ",top);
}
}
return (!top);
}
int main(){
char s[]=")(";
int a=isValid(s);
if(a){
printf("true");
}
else{
printf("false");
}
}
本题涉及以下几点:
1.栈
解读
栈的用法,先入先出。
入栈的字符已经完成取反的操作。