資料結構演算法題/括號匹配
阿新 • • 發佈:2018-11-19
使用棧的思想,左括號入棧,右括號出
import java.util.Deque; import java.util.LinkedList; /** * 輸入string中只能含有括號元素Java中有一個類Stack,用於表示棧,但這個類已經過時了。 * Java中沒有單獨的棧介面,棧相關方法包括在了表示雙端佇列的介面Deque中,主要有三個方法 */ public class StackTest { public boolean isValid(String s) { Deque<Character> stack = new LinkedList<>(); int index = 0; Character top; while (index < s.length()) { Character c = s.charAt(index); switch (c) { case '(': case '[': case '{': stack.push(c); break; case ')': if (stack.isEmpty()) { return false; } top = stack.getFirst(); if (top == '(') { stack.pop(); }else { return false; } // else if (top == '[' || top == '{') { // return false; // } // else {//如果top是)]} // stack.push(c); //// stack.addFirst(c); // } break; case ']': if (stack.isEmpty()) { return false; } top = stack.getFirst(); if (top == '[') { stack.pop(); } else { return false; } // else if (top == '(' || top == '{') { // return false; // } // else { // stack.push(c); //// stack.addFirst(c); // } break; case '}': if (stack.isEmpty()) { return false; } top = stack.getFirst(); if (top == '{') { stack.pop(); } else { return false; } // else if (top == '[' || top == '(') { // return false; // } // else { // stack.push(c); //// stack.addFirst(c); // } break; default: //非括號元素不用管,直接跳過 // stack.push(c); // return false; } index++; } return stack.isEmpty(); } public static void main(String[] args) { String str = "()"; StackTest stackTest = new StackTest(); boolean result = stackTest.isValid(str); System.out.println(result); } }