Leetcode 有效的括号

有效的括号

题目描述

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

有效字符串需满足:

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

示例

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

解题方法及思路

第一次写没做出来,参考了官方解题思路。

最主要的知识点就是用到了(先入后出)还有哈希表键值对(判断括号是否匹配)的思想

class Solution {
public:
    bool isValid(string s) {
     int length= s.size();
     //如果字符长度为奇数,则该字符串肯定无效
      if((length&1)==1)
      {
          return false;
      }
      //创建一个可存储 <char,char> 类型键值对的 unordered_map 容器
      //参考http://c.biancheng.net/view/7231.html
      unordered_map<char,char> umap{
          {')','('},
          {'}','{'},
          {']','['},
      };
      //创建栈存储遇到的左括号( { [
          stack <char> stk;
      //for循环遍历字符串s,这种for循环是C++新标准中的用法
      //参考http://c.biancheng.net/view/7759.html
          for(char ch:s)
          {
              if(umap.count(ch))//如果遇到右括号,判断是否匹配
              {
              //若遇到右括号时栈为空或栈顶左括号与该右括号对应的键值不相等则为false
                if(stk.empty()||stk.top()!=umap[ch])
                {
                    return false;
                }
                else
                {
                  stk.pop();//如果匹配则令栈顶的左括号出栈
                }
              }
              else//如果遇到左括号则存到栈里
              {
                stk.push(ch);
              }

          }
        
  
       return stk.empty();//最后判断栈是否为空,即所有括号是否匹配
      
    }
};

结果

QQ图片20210421085228.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值