思路:1.检查String大小,若为1和0肯定不匹配;2.利用栈的原理进行对比,‘{’'(' '['三个符号放入栈,右侧符号来进行对比。
注意:我的第一个程序在“run code”里面是能成功运行的不过在提交后结果错误,查了下是因为我使用了全局变量,而leetcode本身不支持。
class Solution {
private boolean flag = true;
public boolean isValid(String s) {
//首先判断字符串尺寸,如果为空或者1则不可能匹配
if(s.length() < 2) flag = false;
else{
Stack<Character> x = new Stack<Character>();
for(int i = 0; i < s.length(); i++){
//判断,如果为左侧符号,压入栈中(先进后出)
//检查字符用“==”,检查String用“isEqual()”
if(s.charAt(i) == '{' || s.charAt(i) == '[' || s.charAt(i) == '(')
x.push(s.charAt(i));
else{
//判断如果不是则侧符号,此时栈中无符号,肯定为false
if(x.size() == 0){
flag = false;
}
//pop函数可以调用并移除栈顶层的字符
char top = x.pop();
//判断符号和栈中顶层符号是否匹配
if(s.charAt(i) == '}')
if(top != '{'){
flag = false;
break;
}
else if(s.charAt(i) == ']')
if(top != '['){
flag = false;
break;
}
else if(s.charAt(i) == ')')
if(top != '('){
flag = false;
break;
}
}
}
//还需要检查栈中有无剩余字符,若有剩余,代表不匹配
if(x.size() != 0)
flag = false;
}
return flag;
}
}
其实下面这段代码应该是对的,可是用到了多个return,就总是会被误判为错的。
class Solution {
public boolean isValid(String s) {
Stack<Character> x = new Stack<Character>();
for(int i = 0; i < s.length(); i++){
//判断,如果为左侧符号,压入栈中(先进后出)
//检查字符用“==”,检查String用“isEqual()”
if(s.charAt(i) == '{' || s.charAt(i) == '[' || s.charAt(i) == '(')
x.push(s.charAt(i));
else{
//判断如果不是zuo侧符号,此时栈中无符号,肯定为false
if(x.size() == 0){
return false;
}
//pop函数可以调用并移除栈顶层的字符
char top = x.pop();
//判断符号和栈中顶层符号是否匹配
if(s.charAt(i) == '}')
if(top != '{')
return false;
else if(s.charAt(i) == ']')
if(top != '[')
return false;
else if(s.charAt(i) == ')')
if(top != '(')
return false;
}
}
//还需要检查栈中有无剩余字符,若有剩余,代表不匹配
return x.size() == 0;
}
}
所以打算缩减为一个return,而又不能设置全局变量存储bool值。
下面其实是参考人家别人的一段代码,通过向栈内压入反向字符,减少了代码和return数,就成功了
class Solution {
public boolean isValid(String s) {
Stack<Character> x = new Stack<Character>();
for(int i = 0; i < s.length(); i++){
//判断,如果为左侧符号,压入栈中(先进后出)
//检查字符用“==”,检查String用“isEqual()”
if(s.charAt(i) == '{')
x.push('}');
else if(s.charAt(i) == '[')
x.push(']');
else if(s.charAt(i) == '(')
x.push(')');
else if(x.size() == 0 || x.pop() != s.charAt(i))
return false;
}
return x.size() ==0;
}
}