Description:
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
题意:根据所给的字符串,包含’(‘,’)’,’{‘, ‘}’, ‘[’ 和 ‘]’这三种括号,要求判断其是否合理;即左括号和右括号匹配,并且顺序也要求正确;
解法:可以使用一个栈来实现这个判断,我们将左括号入栈,一旦遇到右括号,弹出栈顶的符号,判断是否是与其相匹配的另外一半;
class Solution {
public boolean isValid(String s) {
if(s.length() == 0){
return true;
}//空串
Stack<Character> brackets = new Stack<>();
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
switch(ch){
case ')':
if(brackets.isEmpty() || brackets.pop() != '(') return false;
break;
case '}':
if(brackets.isEmpty() || brackets.pop() != '{') return false;
break;
case ']':
if(brackets.isEmpty() || brackets.pop() != '[') return false;
break;
default:
brackets.push(ch);//左半部分入栈
break;
}
}
return brackets.isEmpty();//栈为空,说明正确匹配
}
}