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();
* }
* }
*/

猜你喜欢

转载自www.cnblogs.com/shudaixiongbokeyuan/p/13368990.html