leetcode的括號配對,自己寫的程式碼有些問題。求指教
阿新 • • 發佈:2019-02-19
題目是這樣的:
給定一個只包含以下字元的字串’(‘, ‘)’, ‘{‘, ‘}’, ‘[‘和’]’,確定輸入字串是否有效。
在以下情況下,輸入字串是有效的:
開放括號必須用相同型別的括號關閉。
開括號必須按照正確的順序關閉。
注意,空字串也被認為是有效的。
例1:
Input: “()”
Output: true
例2:
Input: “()[]{}”
Output: true
例3:
Input: “(]”
Output: false
例4:
Input: “([)]”
Output: false
例5:
Input: “{[]}”
Output: true
下面是我寫的程式碼:
①這是輸出為:false,然而我找了挺久的都沒發現錯在哪裡;可能是當局者迷吧
package leetCode;
import java.util.Stack;
public class IsValid {
public static void main(String[] args) { String s="(){}[]"; char[] c=s.toCharArray(); int flag=0; Stack<Character> stack=new Stack<Character>(); while(stack.empty()) stack.push(c[0]); System.out.println(stack.elementAt(0)); for(int i=1;i<c.length;i++) { char temp=c[i]; Character p=stack.pop(); if(c[0]==')'&&c[0]=='}'&&c[0]==']') { flag=1; break; } else if(temp=='('||temp=='{'||temp=='[') { stack.push(temp); } else if(temp==')') { if(p=='('&&!stack.empty()) { stack.pop(); } else { flag=1; break; } } else if(temp==']') { if(p=='['&&!stack.empty()) { stack.pop(); } else { flag=1; break; } } else if(temp=='}') { if(p=='{'&&!stack.empty()) { stack.pop(); } else { flag=1; break; } } } if(!stack.empty()||flag==1) //return false; System.out.println("false"); else //return true; System.out.println("true"); }
}
②這個問題是它顯示我的棧是空的(
package leetCode;
import java.util.Stack;
public class IsValid {
public static void main(String[] args) { String s="(){}[]"; Stack<Character> stack=new Stack<Character>(); char[] arr=s.toCharArray(); int flag=0; for(char c:arr) { Character temp=stack.pop(); if(temp==null) { stack.push(c); } if(stack.isEmpty()) { System.out.print(false); } else if(temp=='('&&c==')') { stack.pop(); } else if(temp=='['&&c==']') { stack.pop(); } else if(temp=='{'&&c=='}') { stack.pop(); } else { flag=1; break; } } if(!stack.empty()||flag==1) //return false; System.out.println("false"); else //return true; System.out.println("true");
}
}