• 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);
    }
    

    }

  • 相关阅读:
    去掉谷歌浏览器下input框自动填充的背景色
    ajax请求中动态显示问题
    Array对象的方法有
    请求页面的方法
    IE浏览器checkbox的样式问题
    property、classmethod和staticmethod总结
    面向对象和类
    内置函数补充map、reduce和filter等
    python实现控制台的进度条功能
    python常见内置函数
  • 原文地址:https://www.cnblogs.com/phantom576/p/11650299.html
Copyright © 2020-2023  润新知