20. 有效的括号 c++

20. 有效的括号

写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点

1.栈 3

  • 解题步骤
  1. 将所有指定的括号放在一个unorderd_map中去,制定好对应的key-value。
  2. 然后为true的情况就是能把内部的括号依次对应删除,那么就是有效的括号。
  3. 为false的情况就是括号内部不对应,或者括号左右不匹配

class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,int>ans{{'(',1},{'{',2},{'[',3},{')',4},{'}',5},{']',6}} ;
         stack<char>temp;
         for(char i:s){
             if(ans[i]>=1&&ans[i]<=3) temp.push(i);
             else if(!temp.empty()&&ans[temp.top()]+3==ans[i]) temp.pop();
             else  return false;
             //else if的逻辑就是把正确的归为一类,剩下的都是不对的不用管
         }   
         if(!temp.empty())  return false;
         else return true; 
    }
};

时间复杂度/空间复杂度分析/面试场景如何作答

面试场景

  • 不同情形的解题方式:无
  • 时间复杂度:最坏的情况就是每一个元素都入栈出栈,o(n)。
  • 空间复杂度:最坏的情况就是每一个元素都入例如((((((。

知识点及反思

  1. 多使用else if。
  2. unordered_map的初始化。
  3. 多考虑不同的情况?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值