2021/2/18
阿新 • • 發佈:2021-02-19
有效的括號
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串 s ,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
示例 1:
輸入:s = “()”
輸出:true
示例 2:
輸入:s = “()[]{}”
輸出:true
示例 3:
輸入:s = “(]”
輸出:false
思路
看到這道題想到了看的關於棧的一個說明,和這道題思路基本一致。
這段話中是使用入棧的方式將排在最後的左括號也就是在棧頂的括號和最前面的右括號依次配對,這樣就得到了一對對括號。
public boolean Solution(String s) {
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
//遍歷
for (char c : chars) {
//如果是左括號,就把他們對應的右括號壓棧
if (c == '(') {
stack.push(')');
} else if (c == '{') {
stack.push('}');
} else if (c == '[') {
stack.push(']');
} else if (stack.isEmpty() || stack.pop() != c) {
//否則就只能是右括號。
//1,如果棧為空,說明括號無法匹配。
//2,如果棧不為空,棧頂元素就要出棧,和這個右括號比較。
//如果棧頂元素不等於這個右括號,說明無法匹配,
//直接返回false。
return false;
}
}
//最後如果棧為空,說明完全匹配,是有效的括號。
//否則不完全匹配,就不是有效的括號
return stack.isEmpty();
}