leetcode 20. Valid Parentheses
(Easy)
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
-
核心思想:
识别正确的括号字符串.
空字符串返回true
-
思考: 使用栈
-
注意:
考虑特殊情况: 空串
使用stack的top函数前,考虑stack是否为空.
代码:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
int i = 0;
char c;
while (i < s.length())
{
switch (s[i])
{
case '(':
case '[':
case '{':
stk.push(s[i]);
break;
case ')':
if (!stk.empty() && stk.top() == '(')
{
stk.pop();
break;
}
return false;
case ']':
if (!stk.empty() && stk.top() == '[')
{
stk.pop();
break;
}
return false;
case '}':
if (!stk.empty() && stk.top() == '{')
{
stk.pop();
break;
}c
return false;
default:
return false;
}
i++;
}
if (stk.empty())
return true;
return false;
}
};
Runtime: 4 ms, faster than 58.81% of C++ online submissions for Valid Parentheses.
Memory Usage: 8.6 MB, less than 65.89% of C++ online submissions for Valid Parentheses.
查看了速度较快的代码,思路一致,也是使用stack. 区别是并没有使用switch,而是if语句判定.