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.最后看是否都匹配完了,而且栈要为空.
Code:
class Solution {
bool isLeft(char ch) {
return '{' == ch || '[' == ch || '(' == ch;
}
bool isMatch(char cLeft, char cRight) {
return ('{' == cLeft && '}' == cRight) ||
('[' == cLeft && ']' == cRight) ||
('(' == cLeft && ')' == cRight);
}
public:
bool isValid(string s) {
std::stack<char> kStack;
int i = 0;
for (; i < (int)s.size(); ++i) {
if (isLeft(s[i])) kStack.push(s[i]);// push if is left.
else if (kStack.empty()) break;//s[i] is right.
else if (isMatch(kStack.top(), s[i])) kStack.pop();//match
else break;//no
}
return kStack.empty() && i >= (int)s.size();//stack is empty and for over.
}
};
欢迎访问我的github : https://github.com/tsfissure/LeetCode.leetcode持续更新.