刷爆力扣!反超对象第六天(有效的括号)

目录 

 

1.题目解析

2.代码提交

3.知识点解析

3.1.哈希表

3.2.栈

3.3.增强型for循环

1.题目解析

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

题目示例给的很明确,首先本题需要判断括号是否数目一样,其次位置是否对称,所以奇数的s就首先排除掉,retur一个false,那怎么处理s呢?应该是用栈来解决,但是因为自己对栈不熟悉,查看了题解,最后做了出来。

2.代码提交

class Solution {
public:
    bool isValid(string s) {
        //判断是否是奇数
        if(s.size() % 2 == 1)
        {
            return false;
        }

        //建立一个哈希表
        unordered_map<char,char> strs = 
        {
            {')','('},
            {']','['},
            {'}','{'}
        };

        //新建一个栈
        stack<char> stk;
        
        //增强型for循环
        for(char ch:s)
        {
            if(strs.count(ch))
            {
                //如果栈为空,或者栈顶括号与ch不一样就false,否则弹出
                if(stk.empty() || stk.top() != strs[ch])
                {
                    return false;
                }
                stk.pop();
            }
            else{
                stk.push(ch);
            }
        }
        return stk.empty();
    }
};

最后完美通过!

3.知识点解析

3.1.哈希表

这里参考了一篇文章,解释得很清楚一文解释哈希表

最近瞎逛页发现了一篇很不错的解释,可以看这里哈希表代码版解释

哈希表的new就是这样啦,后面要是需要再单独写一篇记录 

unordered_map<type,type> hashmap ={};

3.2.栈

栈也很重要!!!

好多解法都用到了栈,还是得认真学习一下啊!

首先注意两个点,栈是先进后出原则,然后只能对栈顶进行操作

s.empty();         //如果栈为空则返回true, 否则返回false;
s.size();          //返回栈中元素的个数
s.top();           //返回栈顶元素, 但不删除该元素
s.pop();           //弹出栈顶元素, 但不返回其值
s.push();          //将元素压入栈顶

 好啦,具体的概念解释也会单独出一篇文章啦嘻嘻~

3.3.增强型for循环

之前没有见过感觉好厉害的样子,查了一下资料,简单了解,在这里进行记录一下,基本的语法格式如下:

for(type element: arrays)
  {
    System.out.println(element);
  }

其中type为arrays的类型(例如string,int,double,float),element是被声明的新的局部变量,对应的是数组或集合中的每个元素值。arrays即是要访问的数组名。简单说一下,就是下面这样啦!

for(char ch:s)
{
    //针对ch的遍历
}

需要值得注意的是,

1.迭代器iterator遍历元素与增强型for变量元素区别:使用迭代器iterator遍历集合元素时可以删除集合的元素,但是增强型for循环遍历集合元素时,不能调用迭代器的remove()方法删除对应下标元素。

2.普通for循环和加强型for循环差别:普通for循环可以没有遍历目标,但加强型for循环必须要有遍历目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值