[Leetcode] Valid Parentheses
2015-11-27 14:04
316 查看
问题:
Given a string containing just the characters
The brackets must close in the correct order,
Solution:
这个题比较简单。首先设置一个栈,用于存放尚未匹配的左括号。然后从左到右依次扫描字符串中的字符,如果该字符是左括号,那么需要后面的右括号来匹配,因
此将它入栈;如果是右括号并且栈非空同时栈顶的字符与之匹配,那么它们可以互相消解,将栈顶字符出栈,继续扫描后面的字符,否则可判定字符串不是
valid的。如果字符串中的字符都扫描完了,而栈中还有字符,则可判定字符串不是valid的,否则就是valid的。
Java代码如下:
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; } }
相关文章推荐
- Daily Scrum & Project Team Meeting Review - 11/27
- VS2008mfc文本文档初始界面最大化
- 1096. Consecutive Factors (20)
- 《Java多线程编程实战指南(设计模式篇)》答疑总结(陆续更新)
- eclipse 编译servlet项目,找不到javax.servlet
- Volley进行GET请求,需要Header的解决办法
- 足球赛事法甲联赛接口
- 编程基础知识之编译程序
- ng-value中格式化日期
- Hadoop 环境搭建
- Ecplise 背景颜色修改
- Eclipse 换主题
- 1084. Broken Keyboard (20)
- 什么是P问题、NP问题和NPC问题
- 关于Spring定时任务(定时器)用法
- .net web api返回结果为json
- 最新版使用SSH框架(Struts2.x + Spring4.x + Hibernate5.x)搭建JavaWeb开发环境实例
- Web测试方法
- 1081. Rational Sum (20)
- C语言开发总结(九)