leetcode-20.有效的括号

栈和队列


题目详情

给定一个只包括'(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。


示例1:

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

示例2:

输入:s = "()[]{}"
输出:true

示例3:

输入:s = "(]"
输出:false

我的代码:

从左往右遍历,每当遇到左括号便放入栈内,遇到右括号则判断其和栈顶的括号是否是统一类型,是则从栈内取出左括号,否则说明字符串不合法。

class Solution 
{
public:
    bool isValid(string s) 
    {
        stack<char> parsed;
        for (int i = 0; i < s.length(); ++i)
        {
            if (s[i] == '{' || s[i] == '[' || s[i] == '(')
                parsed.push(s[i]);
            else
            {
                if (parsed.empty())
                return false;
                char c = parsed.top();
                if ((s[i] == '}' && c == '{') || (s[i] == ']' && c == '[') || (s[i] == ')' && c == '('))
                parsed.pop();
                else
                return false;
            }
        }
        return parsed.empty();
    }
};

涉及知识点:

1.栈和队列

stack:后入先出(LIFO)的数据结构,默认基于 deque 实现。stack 常用于深度优先搜
索、一些字符串匹配问题以及单调栈问题。
queue:先入先出(FIFO)的数据结构,默认基于 deque 实现。queue 常用于广度优先
搜索。

posted @ 2022-04-26 10:00  ggaoda  阅读(3)  评论(0编辑  收藏  举报  来源