題目描述:
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。
示例 1:
輸入: “()”
輸出: true
示例 2:
輸入: “()[]{}”
輸出: true
示例 3:
輸入: “(]”
輸出: false
示例 4:
輸入: “([)]”
輸出: false
示例 5:
輸入: “{[]}”
輸出: true
https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode/
代碼:
class Solution {
private HashMap<Character,Character> map = new HashMap<Character,Character>();
public boolean isValid(String s) {
map.put(')','(');
map.put('}','{');
map.put(']','[');
Stack<Character> bracket =new Stack<Character>();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(map.containsKey(c)){
Character topElement = bracket.isEmpty() ? '#' : bracket.pop();
if(topElement != map.get(c)){
return false;
}
}
else{
bracket.push(c);
}
}
return bracket.isEmpty();
}
}
解法流程圖:
總結:
- 注意區分String與Character:前者用“”,後者用’’。
- 棧+HashMap:棧解決了括號是否位置對應的問題,HashMap解決了是否是同類型括號的問題