zoukankan      html  css  js  c++  java
  • 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);
    }
    

    }

  • 相关阅读:
    【操作系统】用Oracle VM VirtualBox 虚拟机安装XP系统时老是蓝屏
    c#操作Xml(六)
    c#操作Xml(五)
    c#操作Xml(三)
    c#操作Xml(四)
    新年快乐
    c#操作Xml(八)
    从IDataReader中读取数据实体
    c#操作Xml(七)
    c#操作Xml(二)
  • 原文地址:https://www.cnblogs.com/phantom576/p/11650299.html
Copyright © 2011-2022 走看看