[LeetCode]Valid Parentheses
2015-07-21 17:49
281 查看
解题思路:
边界条件:stack是空,取到rightSet里面的字符,false;或者遍历str结束后,stack不为空,也是false
前条件:leftSet, rightSet, matchPair
不变式:遍历s,找到没match的pair,false
结束条件:遍历s结束
边界条件:stack是空,取到rightSet里面的字符,false;或者遍历str结束后,stack不为空,也是false
前条件:leftSet, rightSet, matchPair
不变式:遍历s,找到没match的pair,false
结束条件:遍历s结束
class Solution { public: set<char> leftSet; set<char> rightSet; unordered_map<char, char> matchPair; Solution(){ leftSet.insert('('); leftSet.insert('['); leftSet.insert('{'); rightSet.insert(')'); rightSet.insert(']'); rightSet.insert('}'); matchPair['('] = ')'; matchPair['['] = ']'; matchPair['{'] = '}'; } bool isValid(string s) { if (s.length() == 0) return true; stack<char> parentStack; for (int i = 0; i < s.length(); ++i){ if (isInLeftSet(s[i])){ parentStack.push(s[i]); }else if (isInRightSet(s[i])){ if(parentStack.empty()){ return false; } char temp = parentStack.top(); if (isMatch(temp, s[i])){ parentStack.pop(); }else{ return false; } }else{ printf("invalid input."); } } if (!parentStack.empty()){ return false; } return true; } bool isMatch(char left, char right){ if (matchPair.find(left) != matchPair.end()){ return matchPair[left] == right; }else{ printf("invalid input"); } return false; } bool isInLeftSet(char c){ return (leftSet.find(c) != leftSet.end()) ? true : false; } bool isInRightSet(char c){ return (rightSet.find(c) != rightSet.end()) ? true : false; } };
相关文章推荐
- dd命令使用详解
- 数据表生成javabean工具
- thinkphp网站缓存写入失败
- 2015 Multi-University Training Contest 1
- 简易版桶排序
- zx2000 HDMI audio
- 判断字符串是否为数字的多种方法
- 使用Redis来实现LBS的应用
- html5 音频代码
- python os module
- ajax
- ILSpy反编译工具的使用
- [黑马程序员](第6-9天)面向对象(上)
- python list方法
- Failed to fetch URL http://dl-ssl.google.com************
- 运维人员必须掌握--awk的简单用法
- Android--SwipeRefreshLayout 官方下拉刷新控件介绍
- Android的onCreateOptionsMenu()创建菜单Menu详解
- 12天学好C语言——记录我的C语言学习之路(Day 10)
- pyinstaller将ico图标等资源打包到exe中的方法