leetcode第20题有效的括号

时间:2019-10-10
本文章向大家介绍leetcode第20题有效的括号,主要包括leetcode第20题有效的括号使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

package com.lzh.simple;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
//思路:
//遇到左括号将其进行压栈 遇到右括号则将其进行出站 因为这里涉及到多种括号 所以需要对其进行哈希存储
//每次出栈看看是否和对应的右括号进行匹配 匹配则继续进行 不匹配直接返回false 另外最后如果栈空 那么则是匹配的
//如果栈不为空 那么则证明栈不是匹配的
public class ValidContractDemo20 {

public static boolean isValid(String s){
    Map<Character, Character> map = new HashMap<Character, Character>();
    //对相应的括号进行键值存储
    map.put(')', '(');
    map.put(']', '[');
    map.put('}', '{');
    //创建栈
    Stack<Character> stack = new Stack<>();
    for(int i=0; i<s.length(); i++){//从前向后进行遍历
        char c = s.charAt(i);
        if(map.containsKey(c)){//如果存在相应的key也就是右括号那么则出栈 如果栈顶元素和键所对应的值不相等 返回false
            char top = stack.isEmpty()?'#':stack.pop();
            if(top!=map.get(c)){
                return false;
            }
        }else{
            stack.push(c);//如果不存在 也就是这时是左括号 那么就将其进行入栈
        }
    }
    return stack.isEmpty();//栈为空 则匹配
}
//测试
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String s = scanner.next();
    boolean b = isValid(s);
    System.out.println(b);
}

}

原文地址:https://www.cnblogs.com/phantom576/p/11650299.html