LeetCode 20. 有效的括号

20. 有效的括号

难度简单

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

思路:这道题可以用栈来解决,如果遇到左括号,入栈,遇到右括号,出栈,判断,匹配,继续,否则,错误,然后还有考虑特殊情况,第一个元素为右括号,获得的数据为空,获得的数据为奇数个,这些情况都应返回false。

 1 bool isValid(char * s){
 2     if(strlen(s)==0){
 3         return true;
 4     }
 5     if(strlen(s)%2==1){
 6         return false;
 7     }
 8     if(s[0]==']'||s[0]=='}'||s[0]==')'){
 9         return false;
10     }
11     int i,top=-1;
12     char stack[strlen(s)];
13     for(i=0;i<strlen(s);i++){
14         if(s[i]=='['||s[i]=='{'||s[i]=='('){
15             stack[++top]=s[i];
16         }else if(s[i]==']'||s[i]=='}'||s[i]==')'){
17             switch(s[i]){
18                 case ']':
19                     if(stack[top--]=='['){
20                         break;
21                     }else{
22                         return false;
23                     }
24                 case '}':
25                     if(stack[top--]=='{'){
26                         break;
27                     }else{
28                         return false;
29                     }
30                 case ')':
31                     if(stack[top--]=='('){
32                         break;
33                     }else{
34                         return false;
35                     }
36             }
37         }
38     }
39     if(top==-1){
40         return true;
41     }else{
42         return false;
43     }
44 }

 

posted @ 2020-04-29 21:36  莴苣&  阅读(154)  评论(0编辑  收藏  举报