
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014694994/article/details/79953815
题目:
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; } };
查看评论