括号匹配问题

package jing.able;
import java.util.HashMap;
import java.util.Stack;
/**
 * @author: panjing
 * @describe: 括号匹配问题
 * @date: 2019/4/14
 * @time: 16:38
 */

public class PrintKuoHao {


    class Solution {
        //定义一个负责匹配括号(即映射,一一对应)的哈希表
        private HashMap<Character, Character> mappings;
       //对匹配括号的哈希表进行初始化
        public Solution() {
            this.mappings = new HashMap<Character, Character>();
            this.mappings.put(')', '(');
            this.mappings.put('}', '{');
            this.mappings.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);   //将s的第i个元素的指向的位置的字符值传递给字符c
                if (this.mappings.containsKey(c)) {    // 如果传给c的字符是右括号类型的字符

                    char topElement = stack.empty() ? '¥' : stack.pop(); // 获取栈顶元素,如果栈为空,返回¥,否则返回栈顶元素

                    // 如果用get()方法获取得到的字符与栈顶元素不匹配,返回false
                    if (topElement != this.mappings.get(c)) {
                        return false;
                    }
                } else {
                    // 如果是左括号的字符就进栈
                    stack.push(c);
                }
            }

            // 如果栈中还有剩余的字符,就返回false
            return stack.isEmpty();
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值