1. 程式人生 > 實用技巧 >leetcode20.有效的括號(hashmap使用,鍵值匹配)

leetcode20.有效的括號(hashmap使用,鍵值匹配)

public class LeetCode20 {
//Hashmap(key,value)匹配鍵值,Character為字元類
private HashMap<Character,Character> map;
//構造類
public LeetCode20(){
this.map=new HashMap<Character, Character>();
this.map.put(')','(');
this.map.put(']','[');
this.map.put('}','{');
}

public boolean effectiveBracket(String s){
//初始化一個字元棧
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
//如果當前字元是右括號(判斷是不是key)
if(this.map.containsKey(c)){
//判斷棧堆是否為空墨盒,如果為空則新增#,如果不為空則推出棧頂元素賦值給topElement,pop推出棧頂元素(為空時加#目的是防止第一個字元即為右括號,使之可以快速退出)
char topElement=stack.empty()?'#':stack.pop();
//如果這個括號的對映不匹配棧頂的對映,則返回false(判斷棧頂元素和當前字元是否匹配)get(key)返回value
if(topElement!=this.map.get(c)){
return false;}
//如果是左括號則推入棧堆,push推入棧頂元素
}else {
stack.push(c);
}
}
//如果最後結果為空則證明全部匹配完畢
return stack.isEmpty();
}

public static void main(String args[]){
Scanner sc=new Scanner(System.in);
System.out.println("請輸入括號,判斷是否匹配:");
String num=sc.nextLine();
LeetCode20 leedCode20=new LeetCode20();
System.out.println("判斷結果為:"+leedCode20.effectiveBracket(num));
}
}

/**leetcode提交程式碼,無問題
* class Solution {
* //Hashmap(key,value)匹配鍵值,Character為字元類
* private HashMap<Character,Character> map;
* //構造類
* public Solution(){
* this.map=new HashMap<Character, Character>();
* this.map.put(')','(');
* this.map.put(']','[');
* this.map.put('}','{');
* }
* public boolean isValid(String s) {
* //初始化一個字元棧
* Stack<Character> stack=new Stack<Character>();
* for(int i=0;i<s.length();i++){
* char c=s.charAt(i);
* //如果當前字元是右括號(判斷是不是key)
* if(this.map.containsKey(c)){
* //判斷棧堆是否為空墨盒,如果為空則新增#,如果不為空則推出棧頂元素賦值給topElement,pop推出棧頂元素(為空時加#目的是防止第一個字元即為右括號,使之可以快速退出)
* char topElement=stack.empty()?'#':stack.pop();
* //如果這個括號的對映不匹配棧頂的對映,則返回false(判斷棧頂元素和當前字元是否匹配)get(key)返回value
* if(topElement!=this.map.get(c)){
* return false;}
* //如果是左括號則推入棧堆,push推入棧頂元素
* }else {
* stack.push(c);
* }
* }
* //如果最後結果為空則證明全部匹配完畢
* return stack.isEmpty();
* }
* }
*/