题目:
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
解题思路: 用一个堆栈保存左括号,遇到一个右括号就对比栈顶的左括号是否匹配,若不匹配则返回false。如果有多余的左括号或右括号也要返回false。
代码:
class Solution {
public:
bool isValid(string s) {
stack<char> Stack;
string left_string ="([{";
string right_string =")]}";
for(int i = 0; i < s.size(); i++){
std::size_t found_left = left_string.find(s[i]); // 在左边找到目标左括号的下标
std::size_t found_right = right_string.find(s[i]); // 在右边找到目标右括号的下标
if(found_left != std::string::npos){
Stack.push(s[i]);
}
if(found_right != std::string::npos){
// 如果stack为空(即单一的右括号)或者 找不到匹配的括号对, 返回 false
if(Stack.empty() || found_right != left_string.find(Stack.top())) return false;
else Stack.pop();
}
}
// 如果还剩下单一左括号,返回false
if(! Stack.empty())
return false;
return true;
}
};