【每日打卡】有效的括号

有效的括号(简单)

2020年4月18日

题目来源:有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

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

示例 1:

输入: “()”
输出: true
示例 2:

输入: “()[]{}”
输出: true
示例 3:

输入: “(]”
输出: false
示例 4:

输入: “([)]”
输出: false
示例 5:

输入: “{[]}”
输出: true

解题思路
用栈做,是左括号就进栈,下一个字符就跟栈顶左括号进行匹配,这里用了哈希表来存储匹配信息,若匹配就出栈,进行下一次字符的操作。

代码实现

class Solution {
    public boolean isValid(String s) {
        if(s==null || s.length()==0)
            return true;
        Map<Character,Character> map=new HashMap<>();
        Stack<Character> sk=new Stack<>();
        map.put(')', '(');	//这里右括号是key,左括号是value,等会用get()方法的时候就能输出value了
        map.put('}', '{' );
        map.put(']', '[' );
        for(char c:s.toCharArray()) {
        	if(c=='(' || c=='{' || c=='[') {
        		sk.push(c);
        	}else {
        		if(sk.isEmpty() || map.get(c)!=sk.pop())
        			return false;
        	}
        }
        if(sk.isEmpty())
        	return true;
        return false;
    }
}

看到一个代码思路不用map,直接存右括号匹配,非常巧妙,mark一下

public boolean isValid(String s) {
        if(s.isEmpty())
            return true;
        Stack<Character> stack=new Stack<Character>();
        for(char c:s.toCharArray()){
            if(c=='(')
                stack.push(')');
            else if(c=='{')
                stack.push('}');
            else if(c=='[')
                stack.push(']');
            else if(stack.empty()||c!=stack.pop())
                return false;
        }
        if(stack.empty())
            return true;
        return false;
    }
原创文章 57 获赞 54 访问量 2351

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/105636146
今日推荐