C++ 之LeetCode刷题记录(五)

😄😊😆😃😄😊😆😃

开始cpp刷题之旅,多学多练,尽力而为。

先易后难,先刷简单的。

在这里插入图片描述

20. 有效的括号

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = “()”
输出:true
示例 2:

输入:s = “()[]{}”
输出:true
示例 3:

输入:s = “(]”
输出:false

解法:栈

这个用栈比较容易理解,左括号推栈,右括号出栈,最后检查栈是否为空就行。

我刚开始想法是建个Map,然后检查左右括号数量是否相等,来确定最后的值,但是测试的时候有这种情况“([)]” 。 这种情况左右相等,但是是错的,才发现题目要求括号还要对应着。

class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,int> myData = {
			{'{',-1},
			{'}',1},
			{'[',-2},
			{']',2},
			{'(',-3},
			{')',3}
		};
        stack<char> st;
        bool istrue = true;
        for(int i = 0;i<s.length();i++){
            int temp= myData[s[i]];
            if(temp<0){
                st.push(temp);
            }
            else if(st.size()!=0 && st.top() + temp==0){
                st.pop();
            }
            else{
                istrue =false;
            }
        }
        if(!st.empty()){
            istrue = false;
        }
        return istrue;
    }
};

还是通过建个无序Map,将左右赋值正负两种类型。通过判断栈顶值与当前值是否相加为0。

当循环结束时,栈不为0时,返回false。

当当前值大于0,但是与栈顶相加不为0 ,说明不对应,也返回false。

当当前值大于0,栈却为空,说明首先出现了右括号,返回false。

看一下提交记录。

在这里插入图片描述
OK,到此结束,工作再忙,但也要坚持每天一题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

icecream_cheese

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值