020. Valid Parentheses
Difficulty: Easy
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.
思路
字符串中的左括号与相应对右括号配对,且配对好的括号之间的括号也必须是可以配对的。
使用栈,当遇到与栈顶元素配对的括号,就弹出栈顶元素;无法配对的括号压入栈。当遍历完字符串时,栈不为空,那这个括号字符串就是无效的。
此外,括号必须是先左括号再右括号进行匹配,反之无效;字符串包含除括号外的字符也无效。
代码
[C++]
class Solution {
public:
bool isValid(string s) {
const int len = s.length();
int i = 0;
stack<char> stack;
while (i < len) {
if (!validchar(s[i]))
return false;
if (stack.empty() || !correct(stack.top(), s[i]))
stack.push(s[i]);
else
stack.pop();
i++;
}
if (stack.empty())
return true;
else
return false;
}
bool validchar(char a) {
if (a == '(' || a == ')' || a == '{' || a == '}' || a == '[' || a == ']')
return true;
else
return false;
}
bool correct(char a, char b) {
if ((a == '(' && b == ')') || (a == '{' && b == '}') || (a == '[' && b == ']'))
return true;
else
return false;
}
};