1. 程式人生 > >算法題:括號匹配(小中大括號序列)

算法題:括號匹配(小中大括號序列)

ack 等等 實現一個函數 har java turn 說明 [ ] lse

括號序列由( )[ ]{ }組成,不合法的括號序列由( { ) },[ } { ],等等。編程實現一個函數,檢查一個括號序列是否是合法的括號序列。

解法:

思路和“後綴表達式的求解”相似。我們借助棧,每讀一個括號,如果是左括號,那麽入棧,然後繼續讀下一個括號;如果是右括號,那麽就要看看這個右括號和棧頂的括號是否匹配;如果匹配,那麽彈出棧頂的括號,繼續讀下一個括號。當棧變空時,說明此括號序列是合法的。

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("[{)()]"));
	}
 
}
 

  

算法題:括號匹配(小中大括號序列)