题目链接: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 class Solution
2 {
3 public:
4 bool isValid(string s)
5 {
6 stack<char> sc;
7 for(int i = 0; i < s.length(); ++ i)
8 {
9 if(s[i] == ‘(‘ || s[i] == ‘[‘ || s[i] == ‘{‘)
10 sc.push(s[i]);
11 else
12 {
13 if(sc.empty())
14 return false;
15
16 if((sc.top() == ‘(‘ && s[i] == ‘)‘) ||
17 (sc.top() == ‘[‘ && s[i] == ‘]‘) ||
18 (sc.top() == ‘{‘ && s[i] == ‘}‘))
19 sc.pop();
20 else
21 return false;
22 }
23 }
24
25 return sc.empty();
26 }
27 };