class Solution {
public boolean isValid(String s) {
int len = s.length();
if (len == 0) return true;
Stack<Character> stack = new Stack();
char temp;
for (int i = 0; i < len; i++){
temp = s.charAt(i);
if (temp == '{' || temp == '[' || temp == '('){
stack.push(temp);
}else{ //右括号
if (stack.isEmpty()) return false;
char left = stack.pop();
if (left == '(' && temp != ')') return false;
if (left == '{' && temp != '}') return false;
if (left == '[' && temp != ']') return false;
}
}
return stack.isEmpty();
}
}
再附上第一次写的冗余代码
class Solution {
public boolean isValid(String s) {
int len = s.length();
if (len == 0) return true;
if (s.charAt(0) == ')' || s.charAt(0) == ']'||s.charAt(0) == '}' ) return false;
Stack<String> stack = new Stack();
String temp;
for (int i = 0; i < len; i++){
temp = s.charAt(i)+"";
switch(temp){
case "(": stack.push("("); break;
case "[": stack.push("["); break;
case "{": stack.push("{"); break;
case ")":{
if (stack.empty()) return false;
else if (!stack.pop().equals("(")) return false; break;
}
case "]":{
if (stack.empty()) return false;
else if (!stack.pop().equals("[")) return false; break;
}
case "}":{
if (stack.empty()) return false;
else if (!stack.pop().equals("{")) return false; break;
}
}
}
return stack.empty();
}
}
最容易理解的算法(但是效率较低)
class Solution {
public boolean isValid(String s) {
while (s.contains("{}") || s.contains("()") || s.contains("[]")){
s = s.replace("{}", "");
s = s.replace("()", "");
s = s.replace("[]", "");
}
return s.isEmpty();
}
}
使用HashMap优化第一个解法
class Solution {
private static HashMap<Character,Character> map = new HashMap<>();
static {
map.put('(',')');
map.put('[',']');
map.put('{','}');
}
public boolean isValid(String s) {
if (s.length() == 0) return true;
int len = s.length();
Stack<Character> stack = new Stack();
char temp;
for (int i = 0; i < len; i++){
temp = s.charAt(i);
if (map.containsKey(temp)){
stack.push(temp);
}else{ //右括号
if (stack.isEmpty()) return false;
char left = stack.pop();
if (map.get(left) != temp) return false;//栈顶元素与这个元素不匹配
}
}
return stack.isEmpty();
}
}