/** * 有效的括號 給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 注意空字符串可被認爲是有效字符串。 示例 1: 輸入: "()" 輸出: true 示例 2: 輸入: "()[]{}" 輸出: true 示例 3: 輸入: "(]" 輸出: false 示例 4: 輸入: "([)]" 輸出: false 示例 5: 輸入: "{[]}" 輸出: true 思路:如果是左括號,一律亞茹棧中,如果是右括號,判斷棧頂元素是否是對應的左括號,如果不是,返回false,如果是就把 棧頂元素出棧 */
public class Solution7 { static Map<Character,Character> map=new HashMap<Character,Character>(); static MyStack myStack=new MyStack(); static { map.put('}','{'); map.put(')','('); map.put(']','['); } public static void main(String[] args) { boolean result = isValid("()[]{}([{({[]})}])"); System.out.println(result); } public static boolean isValid(String s) { if(s==null){ return true; } char[] chars = s.toCharArray(); for (int i = 0; i < chars.length; i++) { char aChar = chars[i]; if(aChar=='{'||aChar=='('||aChar=='['){ //入棧 myStack.add(aChar); }else{ //判斷棧是否爲空 boolean empty = myStack.empty(); if(empty){ return false; } //出棧 char pop = (char) myStack.pop(); if(pop!=map.get(aChar)){ return false; } } } return true; } /** * 自定義棧 */ protected static class MyStack extends Stack { //出棧並且返回棧頂元素 @Override public synchronized Object pop() { return super.pop(); } //入棧 @Override public synchronized boolean add(Object o) { return super.add(o); } //判斷棧是否爲空 @Override public boolean empty() { return super.empty(); } } }