括号序列(NC52/考察次数Top18/难度简单)

Posted 码农指南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号序列(NC52/考察次数Top18/难度简单)相关的知识,希望对你有一定的参考价值。

描述:
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。

示例1
输入:
“[”
返回值:
false

示例2
输入:
“[]”
返回值:
true
(题目来自牛客网)

用C++实现如下

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        // write code here
        //思路,可以使用一个栈来解决问题,依次遍历s的各个元素
        //保证stack不为空,然后判断后面的元素,配上了弹出,没配上接着push进去,最后判断栈是否为空即可
        stack<char> c;
        for(int i = 0; i<s.length(); i++)
        {
            //首先push元素进去,保证stack不为空,然后continue结束此次,判断下一个
            if(c.empty())                                //判断c是否为空;
            {
                c.push(s[i]);                            //push用于stack和queue等;push_back则用于vector;
                continue;                                //c中多一个元素;
            }
            if(s[i] == ')' && c.top() == '(' ){          //字符串用单引号;c.top()表示栈顶元素
                c.pop();                                 //配对成功,弹,下次遍历会从配对好的下一个元素开始
            }else if(s[i] == ']' && c.top() == '[' ){
                c.pop();
            }else if(s[i] == '}' && c.top() == '{' ){
                c.pop();
            }else{
                c.push(s[i]);                            //没有配对接着,push进去;
            }
        }
        return c.empty();                                //最后判断c是否为空即可
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

以上是关于括号序列(NC52/考察次数Top18/难度简单)的主要内容,如果未能解决你的问题,请参考以下文章

最小编辑代价(NC35/考察次数Top52/难度较难)

最长公共子序列-II(NC92/考察次数Top58/难度中等)

最长公共子序列-II(NC92/考察次数Top58/难度中等)

最长公共前缀(NC55/考察次数Top64/难度简单)

最长公共前缀(NC55/考察次数Top64/难度简单)

进制转换(NC112/考察次数Top50/难度简单)