题目
地址
https://leetcode.com/problems/valid-parentheses/description/
内容
Given a string s 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.
- Every close bracket has a corresponding open bracket of the same type.
Example 1:
Input: s = “()”
Output: true
Example 2:
Input: s = “()[]{}”
Output: true
Example 3:
Input: s = “(]”
Output: false
Example 4:
Input: s = “([])”
Output: true
Constraints:
- 1 <= s.length <= 104
- s consists of parentheses only ‘()[]{}’.
解题
这题就是要求检测各种括号的匹配问题。我记得上大学时,老师讲栈结构时,就是用类似的题目来考察我们的。对于([{
,我们就入栈;对于)]}
,我们就检测栈顶的括号类型是否匹配。一旦发现不匹配,就直接返回false。只有在分析完所有字符后,栈的空间大小是0,才能说明输入的内容是合法的。
#include <string>
#include <stack>
using namespace std;
class Solution {
public:
bool isValid(string s) {
stack<char> charStack;
for(char ch : s) {
if(ch == '(' || ch == '[' || ch == '{') {
charStack.push(ch);
} else {
if (charStack.empty()) {
return false;
}
char topChar = charStack.top();
if ((ch == ')' && topChar != '(') ||
(ch == ']' && topChar != '[') ||
(ch == '}' && topChar != '{')) {
return false;
}
charStack.pop();
}
}
return charStack.empty();
}
};
代码地址
https://github.com/f304646673/leetcode/tree/main/20-Valid-Parentheses