力扣刷题算法心得 1 | 有效的括号

力扣题目链接:20. 有效的括号 - 力扣(LeetCode)

分析:主要是如何判断括号是满足题意的,有哪几种组合是不满足题意的。

根据分析,我们知道括号的成对满足栈的特性,所以借助栈来解决题目。

1:当右括号多余时,如 )))不满足题意

2:当左括号多余时,如(((也不满足题意

3:当括号不多余时,括号不匹配,如[ (  ] ),同样不满足题意

由此将不符合题意的选出。

实现代码如下:

  1. class Solution {
  2. public:
  3.     bool isValid(string s) 
  4.     {
  5.         //若括号长度为奇数时,不满足题意
  6.         if(s.size()%2!=0)
  7.         {
  8.             return false;
  9.         }
  10.         //定义一个栈
  11.         stack<char> sta;
  12.         //有三种情况不符合题意
  13.         //1.左括号多余。2.右括号多余。3.括号不多于但是括号不匹配,如[(])
  14.         for(int i = 0;i <s.size();i++)
  15.         {
  16.             if(s[i] == '(')
  17.             {
  18.                 sta.push(')');
  19.             }
  20.             else if(s[i] == '[')
  21.             {
  22.                 sta.push(']');
  23.             }
  24.             else if(s[i] == '{')
  25.             {
  26.                 sta.push('}');
  27.             }
  28.             //2.右括号多余。3.括号不多于但是括号不匹配,如[(])
  29.             else if(sta.empty() || s[i] !=sta.top())
  30.             {
  31.                 return false;
  32.             }
  33.             else{
  34.                 sta.pop();
  35.             }
  36.         }
  37.         //1.左括号多余。
  38.         return sta.empty();
  39.     }
  40. };

运行结果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值