Day 15 有效的括号

有效的括号

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

使用语言:C++
思路:压栈弹栈 栈的一系列操作
分析:

检验扩号是否匹配可以用“期待的紧迫程度”这个概念来描述。例如考虑下面的扩号序列:
       [  (  [  ]   [  ]  )  ]
       1  2  3  4   5  6  7  8
     分析可能出现的不匹配的情况:
     1)到来的右扩号并非所期待的;
     2)到来的是“不速之客”;
     3)直到结束,也没有到来所“期待”的;

代码:

class Solution {
public:
    bool isValid(string s) {
       int State=1,i=0,k=0;
       char a[10000];
       while(i<s.size()&&State==1){
           switch(s[i]){
               case '(':{a[k]='(';k++; break;}
                case '[':{a[k]='[';k++; break;}
                 case  '{': {a[k]='{';k++; break;}
                case ']' :  {if(k>0&&a[k-1]=='[') {a[k-1]='\0'; k--;}
                                 else State=0;
                                 break;
                               }
                case ')' :  {if(k>0&&a[k-1]=='(') {a[k-1]='\0'; k--;}
                                 else State=0;
                                 break;
                               }
                case '}' :   {if(k>0&&a[k-1]=='{') {a[k-1]='\0'; k--;}
                                 else State=0;
                                 break;
                               }
           }
           i=i+1;
       }
      if (State==1&&k==0) return true;
         else return false;

    }
};

在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

发布了23 篇原创文章 · 获赞 0 · 访问量 220

猜你喜欢

转载自blog.csdn.net/Lester18/article/details/104877803