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

}

posted @ 2019-10-10 20:06  菜鸟phantom卡卡  阅读(109)  评论(0编辑  收藏  举报