题目
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
解题思路
- 因为括号是由左右匹配的,所以可以通过出入栈来存储数据;
- 匹配后出栈,否则入栈;
- 通过判断站是否有存于来返回结果;
- 因为匹配的括号插值在1或2,所以可以直接通过值的比较来判断是否匹配。
代码展示
java
public class Zero {
public static void main(String[] args) {
Zero zero = new Zero();
System.out.println(zero.isValid("()"));
System.out.println(zero.isValid("()[]{}"));
System.out.println(zero.isValid("(]"));
}
//字符对应的数字 (:40 ):41 [:91 ]:93 {:123 }:125
public boolean isValid(String s) {
int length = s.length();
if(length % 2 != 0){
return false;
}
Stack<Character> data = new Stack<>();
data.push(s.charAt(0));
for (int i = 1; i < length; i++){
char now = s.charAt(i);
if(data.size() != 0) {
Character temp = data.peek();
if (temp == now - 1 || temp == now - 2) {
data.pop();
} else {
data.push(now);
}
} else {
data.push(now);
}
}
return data.size() == 0;
}
}