LeetCode之20---Valid Parentheses
来源:互联网 发布:app分发平台cms 编辑:程序博客网 时间:2024/05/29 12:52
题目:
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.
题目大意:
给定一个字符串,判断字符串中的括号是否配对。
思路:
判断括号是否配对问题是数据结构中栈那一章最重要的一个应用之一,有了数据结构的只是基础之后这道题做起来还是蛮容易的。大体思路是:当遇到左半括号时入栈,当遇到右半括号时取栈顶看其是否匹配,如果匹配则弹出栈顶继续扫描字符串,如果不匹配则直接返回false。当在字符串扫描结束,栈中元素恰好为空时匹配成功,返回true。
代码:
class Solution {public: bool isValid(std::string s) { const int size = s.size(); std::stack<char> v; if (size % 2) { return false; } else if (size == 0) { return true; } for (int i = 0; i < size; ++i) { const char tmp = s[i]; if (tmp == '(' || tmp == '{' || tmp == '[') { v.push(tmp); } else if ((!v.empty()) && ((tmp == ')' && v.top() == '(') || (tmp == ']' && v.top() == '[') || (tmp == '}' && v.top() == '{'))) { v.pop(); } else { return false; } } return v.empty(); }};在判断的时候也可以使用ASCII码的差值来判断,因为所要匹配的各个ASCII码值为:(--->40、)--->41、[--->91、 ]--->93、{--->123、 }---->125所以可以通过判断ASCII的差值是否等于1或者2来得到答案,这个判断思路是在LeetCode的答案区看到的,当时他的代码是这样写的:
bool isValid(string s) { stack<char> pare; for(auto c:s){ if(c=='(' || c=='{' || c=='['){ pare.push(c); }else{ if(pare.empty()) return false; if(c-pare.top()>2) return false; //becasue in Ascii, (:40, ):41, [:91, ]:93, {:123, }:125 pare.pop(); } } return pare.empty();}
可是在我看来这段代码算是有问题。这段代码中他直接把所有的情况都判断为扫描值减去栈顶元素是否小于2来判断是否匹配的,可是事实上92的ASCII码所对应的字符是\,所以当出现[\]这样一串字符时就出现问题了,下边是我在LeetCode中测试的结果:
可见程序确实是出现了BUG,报出了Runtime Error的错误。这里的Runtime Error的错误不知道是这段代码报出来的还是内部标准答案报出来的我不得而知。但是当提交这段代码的时候它确实AC了这道题。可见LeetCode在这道题的测试用例上不够全面。当然,这个判断方法也是可以的,不过要明确分类判断差值到底是1还是2。
0 0
- LeetCode之20---Valid Parentheses
- leetcode之Valid Parentheses
- LeetCode之Valid Parentheses
- leetcode之Valid Parentheses
- LeetCode之Valid Parentheses
- 【LeetCode】之Valid Parentheses
- 【Leetcode】之Valid Parentheses
- leetcode之Valid Parentheses
- LeetCode之Valid Parentheses
- leetcode 之 Valid Parentheses
- LeetCode第20题之Valid Parentheses
- LeetCode 20: Valid Parentheses
- LeetCode(20) Valid Parentheses
- leetcode 20 Valid Parentheses
- Leetcode【20】:Valid Parentheses
- leetcode 20-Valid Parentheses
- [leetcode 20] Valid Parentheses
- [Leetcode] 20 - Valid Parentheses
- 【leetcode】155. Min Stack
- Cartesian k-means论文理解
- 配置 Apache 服务器支持 PHP 文件的解析
- 如何使用yarn界面查看spark job运行的情况
- ERROR 1045 (28000): Access denied for user 'hive'@'localhost' (using password: YES)
- LeetCode之20---Valid Parentheses
- java web项目搭建(spring4+springMVC+hibernate)
- 实现一个具有GetMin功能的栈
- [技术讨论]关于前几天发布的京东bug上的问题分析
- http://blog.sina.com.cn/s/blog_4452275001012vzl.html
- iOS学习笔记31-从图册获取图片和视频
- Linux 25周年:与创始人Linus Torvalds对话
- 内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe
- 2016年国内开源镜像站点汇总