题目链接:Valid Parentheses
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
这道题的要求是检查括号是否匹配,其中字符串只包含’(‘、’)’、’{‘、’}’、’[’ 和 ‘]’。
这道题的思路比较简单,用栈维护左括号,即在读取字符串的时候,遇到左括号就入栈。而在遇到右括号的时候,检测栈的状态,如果栈为空,说明没有与该右括号匹配的左括号,直接返回false;如果栈顶元素与该右括号不匹配,说明括号没有匹配,返回false;如果相匹配,这可以弹出栈顶元素,继续读取下一个字符了。
在判断括号是否匹配的时候,可以选择用if语句判断,也可以采用map实现。
时间复杂度:O(n)
空间复杂度:O(n)
======
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution
{
public:
bool isValid(string s)
{
stack<char> sc;
for(int i = 0; i < s.length(); ++ i)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
sc.push(s[i]);
else
{
if(sc.empty())
return false;
if((sc.top() == '(' && s[i] == ')') ||
(sc.top() == '[' && s[i] == ']') ||
(sc.top() == '{' && s[i] == '}'))
sc.pop();
else
return false;
}
}
return sc.empty();
}
};