20. 有效的括号
难度简单
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
• 1 <= s.length <= 104
• s 仅由括号 '()[]{}' 组成
来自 https://leetcode-cn.com/problems/valid-parentheses/
代码:
class Solution {
public boolean isValid(String s)
{
Map<Character,Character> map=new HashMap<>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
Deque<Character> d=new LinkedList<>();
d.push(s.charAt(0));
for(int i=1;i<s.length();i++)
{
char c=s.charAt(i);
//若是括号的右边
if(map.containsKey(c))
{
//看栈顶元素是否是括号的左半部分
if(d.peek()==map.get(c))
{
d.poll();
}
else
{
return false;
}
}
//若是括号的左边,入栈
else
{
d.push(c);
}
}
if(d.isEmpty())
{
return true;
}
return false;
}
}
优化
1. 若字符串长度为奇数,直接返回false
2. 如果当前字符为右括号,且当前栈为空,直接返回false