数据结构入门(20. 有效的括号)

做leetcode记录
题目链接:leetcode 20.有效的括号


一、思路

  1. 因为括号必须成对出现才能算有效括号,因此字符串的长度必须是2n。
  2. 用栈来解决这个问题。遍历字符串,如果是左括号则入栈,如果是右括号就与栈顶的元素比较,如果是"()“或”[]“或”{}",就出栈,否则左括号和右括号不是同一种类型,返回false。遍历完string后,如果栈内为空,说明所有的括号都是有效的,返回true,否则返回false。

二、视频


三、代码

class Solution {
public:
    bool isValid(string s) {
        //string s的长度必须是偶数,如果是奇数就返回false
        if(s.size() % 2 == 1) return false;
        stack<char> save;
        for(char c : s)
        {
            if(c == '(' || c == '[' || c == '{') //如果是左括号则入栈
            {
                save.push(c);
            }
            else if(!save.empty() && save.top() == '(' && c == ')') save.pop();
            else if(!save.empty() && save.top() == '[' && c == ']') save.pop();
            else if(!save.empty() && save.top() == '{' && c == '}') save.pop();
            else save.push(c);  //左括号和右括号不是同一种类型,返回false
        }
        return save.empty();  //如果栈内为空,说明所有的括号都是有效的,返回true,否则返回false
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值