括號匹配(小中大括號序列)
阿新 • • 發佈:2018-12-20
括號序列由( )[ ]{ }組成,不合法的括號序列由( { ) },[ } { ],等等。程式設計實現一個函式,檢查一個括號序列是否是合法的括號序列。
解法:
思路和“字尾表示式的求解”相似。我們藉助棧,每讀一個括號,如果是左括號,那麼入棧,然後繼續讀下一個括號;如果是右括號,那麼就要看看這個右括號和棧頂的括號是否匹配;如果匹配,那麼彈出棧頂的括號,繼續讀下一個括號。當棧變空時,說明此括號序列是合法的。
public class Test05 { public static boolean isValid(String exp) { String left = "([{"; String right = ")]}"; Stack<Character> s = new Stack<Character>(); for (int i = 0, len = exp.length(); i < len; i++) { char ch = exp.charAt(i); if (left.indexOf(ch) != -1) { s.push(ch); } else if (right.indexOf(ch) != -1) { if (!s.isEmpty()) { char temp = s.pop(); if (ch != right.charAt(left.indexOf(temp))) { return false; } } else { return false; } } } return s.isEmpty(); } public static void main(String[] args) { System.out.println(isValid("([()]{})")); System.out.println(isValid("((){}")); System.out.println(isValid("[{)()]")); } }