您的位置:首页 > 其它

[20] Valid Parentheses

2016-07-26 11:49 363 查看

1. 题目描述

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

给定一个字符串,判断字符串中包含的三种括号’(’ / ‘[’ / ‘{‘是否是成对的。

2. 解题思路

判断括号是否成对使用一个栈即可。当括号为左括号的时候入栈,右括号的时候出栈判断是否匹配。但是其中还是有两个坑,有坑就是因为一开始没想清楚就写代码(piapiapia该打)。一个就是当输入一堆右括号的时候,出栈要判断栈是否为空。另一个就是当输入一堆左括号的时候,如果出栈完成还有左括号在栈里那么也是不匹配的,如({{()[{}]这样子的,最后栈里还留下了({{,他并不是一个满足要求的输入。

3. Code

import java.util.Stack;

public class Solution {
public boolean isValid(String s) {
Stack<Integer> brackets = new Stack<>();
// 判断一下是不是奇数长度,如果是,肯定不是一个正确结果
if(s.length()%2 != 0) return false;
for(int i = 0; i < s.length(); ++i)
{
char curc = s.charAt(i);
if(isLeft(curc)) brackets.push((int)curc);
else
{
// 坑1:}])...
if(brackets.isEmpty()) return false;
if(curc == ')')
{
if(brackets.pop() != '(') return false;
}
else if(curc == ']')
{
if(brackets.pop() != '[') return false;
}
else if(curc == '}')
{
if(brackets.pop() != '{') return false;
}
else
{
return false;
}
}
}
// 坑2: {([...
if(brackets.isEmpty()) return true;
return false;
}

private boolean isLeft(char c)
{
return c == '(' || c == '[' || c == '{';
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 栈与队列