題目
給定一個(gè)只包括 '(',')'嗅榕,'{'顺饮,'}'吵聪,'[',']' 的字符串 s 兼雄,判斷字符串是否有效吟逝。
有效字符串需滿(mǎn)足:
左括號(hào)必須用相同類(lèi)型的右括號(hào)閉合。
左括號(hào)必須以正確的順序閉合赦肋。
示例 1:
輸入:s = "()"
輸出:true
示例 2:
輸入:s = "()[]{}"
輸出:true
示例 3:
輸入:s = "(]"
輸出:false
示例 4:
輸入:s = "([)]"
輸出:false
示例 5:
輸入:s = "{[]}"
輸出:true
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/valid-parentheses
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有块攒。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處佃乘。
題解
括號(hào)成對(duì)出現(xiàn)囱井,使用哈希表進(jìn)行存儲(chǔ);使用棧保證括號(hào)的正確順序趣避。
public boolean isValid(String s) {
int n = s.length();
if (n % 2 == 1) {
return false;
}
HashMap<Character, Character> pairs = new HashMap<Character, Character>() {{
put(')', '(');
put(']', '[');
put('}', '{');
}};
Deque<Character> stack = new LinkedList<Character>();
for (int i = 0; i < n; i++) {
char ch = s.charAt(i);
if (pairs.containsKey(ch)) {
if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}