題目描述
給定一個字串,裡邊可能包含“()”、“[]”、“{}”三種括號,請編寫程式檢查該字串中的括號是否成對出現,且巢狀關係正確。
若括號成對出現且巢狀關係正確,或該字串中無括號字元,輸出:true;
若未正確使用括號字元,輸出:false。
實現時,無需考慮非法輸入。
用例
輸入
(1+2)/(0.5+1)
輸出
true
解題思路
- 建立一個 hashMap 來封裝左右括號的對映關係:
")" => "("
;"]" => "\["
;"}" => "{"
- 遍歷字串,遇到"(","[","{" 字串則入棧;遇到 ")","]","}" 字串,則判斷棧是否為空,如果為空,或者遇對映關係無法匹配時,則輸出 false。
程式碼實現
public class BracketChecker {
public static boolean isBalanced(String line) {
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
Stack<Character> stack = new Stack<>();
for (char c : line.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (stack.isEmpty() || !map.get(c).equals(stack.peek())) {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
String line = sc.nextLine();
System.out.println(isBalanced(line));
}
}
}