在檢測括號匹配的算法中使用到了棧,算法描述如下:創建一個空棧,讀取字符序列直到結尾。如果字符是開放符號'(''[''{',將其入棧;如果是一個封閉符號')'']''}',則當棧爲空時報錯(不匹配),否則,將棧頂元素彈出,如果彈出的符號不是對應的開放符號,則報錯(不匹配)。
注意:本題目和前面的一篇博文《2014年有道研發崗算法題(9月17):規則序列問題 》有區別,採用棧實現規則序列問題無法找到最優解。
Java實現代碼如下:
轉載時請註明來源:http://blog.csdn.net/ccfeng2008
代碼測試通過
public class BalanceSymbol {
public static boolean balance(String str) {
if (str == null || (str = str.trim()).trim().equals(""))
return true;
Stack<Character> stack = new Stack<Character>();
boolean flag = true;
char tmp;
for (int i = 0, len = str.length(); i < len; i++) {
tmp = str.charAt(i);
if (tmp == '(' || tmp == '[' || tmp == '{')
stack.push(tmp);
if (tmp == ')' && (stack.isEmpty() || stack.pop() != '(')) {
flag = false;
break;
}
if (tmp == ']' && (stack.isEmpty() || stack.pop() != '[')) {
flag = false;
break;
}
if (tmp == '}' && (stack.isEmpty() || stack.pop() != '{')) {
flag = false;
break;
}
}
return flag && stack.isEmpty();
}
public static void main(String[] args) {
System.out.println(balance("()"));//true
System.out.println(balance("{}"));//true
System.out.println(balance("[]"));//true
System.out.println(balance("([{}])"));//true
System.out.println(balance("([)]"));//false
System.out.println(balance("(([])[()]{[]})"));//true
System.out.println(balance("{}(([])[()]{[]}[)"));//false
}
}