Leetcode_20_Valid Parentheses
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41450987
通过本文你能学到如下知识:
(1)对数据结构中栈的理解,特别是Stack类中的peek()方法和pop()方法的区别。
(2)理解解题思路,提高思考问题的能力。
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.
题意:给定包含三种括号的字符串,判断该字符串中括号是否正确匹配。
解题思路:
(1)通过题意可知,括号是夹杂在字符之间的,而我们需要处理的是括号,所以,第一步是如何地将括号从字符串中分离出来。通过遍历字符串可将出现的括号存储起来。
(2)由于括号是成对进行匹配的,这里将成对出现的括号存储在HashMap中,以供后续查询比较。
(3)我们是通过一个栈来进行括号匹配的,我们将(1)中得到的括号往栈中存储以进行比较,第一个括号存储进去后,当第二个括号进入时需要进行判断。首先,判断其是否为
朝向左边的括号,这里用leftList.contains()进行判断,如果是不朝向左边的括号,将该括号压入栈中;如果不是朝向左边的括号,就需要从栈中取出元素和该括号进行比较,这里
用peep()方法获取当前的栈顶元素(不移除该元素)。其次,通过(2)中已获取的Map来得到与当前括号匹配的括号,如果得到的括号正好匹配,则从当前栈中移除已有元素,移
除栈顶元素的方法为pop();如果得到的括号不匹配,则匹配失败,返回false。最后,依次类推,直到所有的括号都进行匹配判断为为止。
PS:上面的解题思路肯定不是最好的,但其是本人自己思考的结果,虽然代码很罗嗦,但是思路还是比较清晰的,希望对你有所帮助,同时希望你给出建议,也希望能和大神进行一些交流。
解题代码如下(PS:本人技术比较菜,写的代码也很菜,但是OJ还是完全可以通过,大家有比较好的思路希望能够分享,谢谢):
public boolean isValid(String s) {
int len = s.length();
boolean isvalid = true;
Stack<Character> stack = new Stack<Character>();
Character[] all = {'[','(','{',']',')','}'};
Character[] left = {']',')','}'};
List<Character> leftlist = Arrays.asList(left);
List<Character> alllist = Arrays.asList(all);
Map<Character, Character> map = new HashMap<Character, Character>();
map.put('[', ']');
map.put('(', ')');
map.put('{', '}');
map.put('}', '{');
map.put(')', '(');
map.put(']', '[');
LinkedList<Character> linked = new LinkedList<Character>();
for (int i = 0; i < len; i++) {
if(alllist.contains(s.charAt(i))){
linked.add(s.charAt(i));
}
}
if(linked.size()==0) return true;
stack.push(linked.get(0));
for (int i = 1; i < linked.size(); i++) {
Character str = linked.get(i);
if(leftlist.contains(str) && stack.size() > 0){
if(map.get(str).equals(stack.peek())){
stack.pop();
}else{
isvalid = false;
}
}else{
stack.push(str);
}
}
if(stack!=null && stack.size()>0){
isvalid = false;
}
return isvalid;
}
Leetcode_20_Valid Parentheses的更多相关文章
- [LeetCode] Remove Invalid Parentheses 移除非法括号
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...
- [LeetCode] Different Ways to Add Parentheses 添加括号的不同方式
Given a string of numbers and operators, return all possible results from computing all the differen ...
- [LeetCode] Longest Valid Parentheses 最长有效括号
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
- [LeetCode] Generate Parentheses 生成括号
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- [LeetCode] Valid Parentheses 验证括号
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- LeetCode 22. Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- 【leetcode】Generate Parentheses
题目简述: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...
- No.022:Generate Parentheses
问题: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...
- 【LeetCode】241. Different Ways to Add Parentheses
Different Ways to Add Parentheses Given a string of numbers and operators, return all possible resul ...
随机推荐
- 【转】动态规划DP
[数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...
- 文件操作(open\read\write\close)
为了方便演示,我们建立了一个示范文本,如下所示: hello,我是代码螺丝钉 test1 test2 test3 文件的读 f = open("示范文本","r" ...
- 保留键的情况下取字典中最大的值(max\zip函数的联合使用)
在我们平常想要获取字典中value最大或者最小的值的时候,常常使用如下函数: testDict = {"age1":18,"age2":20,"age ...
- 剑指架构师系列-spring boot的logback日志记录
Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...
- mongo 读分析
分布式读 读冲突 分布式中数据库有多份数据,各份数据可能存在不一致性. mongo 只会写到primary节点上,理论上来说不会有文档冲突,也就是说数据库中的数据都以primary节点为标准. 但是有 ...
- Programming In Scala笔记-第十五章、Case Classes和模式匹配
本章主要分析case classes和模式匹配(pattern matching). 一.简单例子 接下来首先以一个包含case classes和模式匹配的例子来展开本章内容. 下面的例子中将模拟实现 ...
- CentOS 7 下使用虚拟环境Virtualenv安装Tensorflow cpu版记录
1.首先安装pip-install 在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error ...
- ListView下拉刷新上拉加载更多实现
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
- JAVA面向对象-----main方法详解
JVM看不懂的可以跳过,这里不做过多解释,(^__^) 嘻嘻-- 主函数是静态的 public static void main(String[] args){ } 主函数是什么:主函数是一个特殊的函 ...
- Struts 1 之配置文件
web.xml中配置Struts的入口Servlet--ActionServlet,ActionServlet不负责任何的业务处理,它只是查找Action名单,找到path属性与URL属性一致的Act ...