您的位置:首页 > 其它

[Leetcode] Valid Parentheses

2015-11-27 14:04 316 查看
问题:

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.

Solution:

这个题比较简单。首先设置一个栈,用于存放尚未匹配的左括号。然后从左到右依次扫描字符串中的字符,如果该字符是左括号,那么需要后面的右括号来匹配,因
此将它入栈;如果是右括号并且栈非空同时栈顶的字符与之匹配,那么它们可以互相消解,将栈顶字符出栈,继续扫描后面的字符,否则可判定字符串不是
valid的。如果字符串中的字符都扫描完了,而栈中还有字符,则可判定字符串不是valid的,否则就是valid的。

Java代码如下:

public class Solution {
public boolean isValid(String s) {
Deque<Character> stack = new LinkedList<>();  // 这里避免使用遗留类Stack,而用推荐的Deque来表示栈
Map<Character, Character> map = new HashMap<>();  // 使用Map建立左右括号之间的映射,方便判断左右括号是否匹配
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '(' || c == '[' || c == '{') { // 如果是左括号
stack.addFirst(c);
}else if(c == ')' || c == ']' || c == '}') {  // 如果是右括号
if(stack.size() == 0 || map.get(c) != stack.removeFirst()) {
return false;
}
}else { // 如果是左右括号以外的字符
return false;
}
}
return stack.size() == 0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: