合理的括号(野生翻译)
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
输入的括号要成对,同时顺序要正确。
使用栈stack(先进后出的数据结构)处理这个问题。把括号放进去(s.push()),后来的括号如果和顶端元素(s.top())相匹配,也就是栈顶是“(”,后来是“)”,就弹出(s.pop())栈顶元素,否则放进栈里,等待匹配。最后如果栈是空的说明都匹配了,否则就是不合理的括号。
C++版本。
class Solution {
public:
bool isValid(string s) {
stack<char> s1;
int len = s.length();
if(len == 0) return true;
s1.push(s[0]);
for(int i=1;i<len;i++){
if(!s1.empty()){
if(s1.top()=='(' && s[i] == ')' || s1.top()=='[' && s[i] == ']' || s1.top()=='{' && s[i] == '}' ){
s1.pop();
}else{
s1.push(s[i]);
}
}else{
s1.push(s[i]);
}
}
if(s1.empty()){
return true;
}else{
return false;
}
}
};