思路: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;
}
}