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 常用于广度优先
搜索。