20. Valid Parentheses
2016-05-04 14:06
429 查看
1.Question
Given a string containing just the characters
determine if the input string is valid.
The brackets must close in the correct order,
all valid but
not.
2.Code
3.Note
a. 首先可以先判断字符串的字符数是否为偶数,如果是奇数肯定是not valid 的。
b.
为了映射方便,用一个map将"() [] {} "分别对应起来。如代码第8行。
c.
考虑到这种括号里可以有括号的问题,就想到了stack。如果是左括号就将其压入栈,如果是右括号,先判断栈是否为空,若为空那肯定return false;若不为空,则将其和最近的左括号进行匹配判断,看看是否是对应匹配的,如果是匹配的,则可以把这一对给去掉,也就是把相应的左括号弹出栈。遍历完字符串之后还有判断一下栈是否为空,若不为空说明还有没有被匹配的左括号,则return false。
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.
2.Code
class Solution { public: bool isValid(string s) { int size = s.size(); if(size % 2) return false; stack<char> st; unordered_map<char, char> map; map['('] = ')'; map['{'] = '}'; map['['] = ']'; for(int i = 0; i < size; i++) { if(s[i] == '(' || s[i] == '[' || s[i] == '{') st.push(s[i]); else if(st.empty() || map[st.top()] != s[i]) return false; else st.pop(); } if(st.empty()) return true; else return false; } };
3.Note
a. 首先可以先判断字符串的字符数是否为偶数,如果是奇数肯定是not valid 的。
b.
为了映射方便,用一个map将"() [] {} "分别对应起来。如代码第8行。
c.
考虑到这种括号里可以有括号的问题,就想到了stack。如果是左括号就将其压入栈,如果是右括号,先判断栈是否为空,若为空那肯定return false;若不为空,则将其和最近的左括号进行匹配判断,看看是否是对应匹配的,如果是匹配的,则可以把这一对给去掉,也就是把相应的左括号弹出栈。遍历完字符串之后还有判断一下栈是否为空,若不为空说明还有没有被匹配的左括号,则return false。
相关文章推荐
- wind.js助力异步编程
- [spring源码学习]四、IOC源码——普通bean初始化
- 在JSP页面下使用AJAX实现用户名存在的检测
- Tomcate的启动问题
- python 装饰器的使用
- JAVA第一课
- JSONArray 数组 在不转为对象的情况下取出 某个元素组成列表
- tornado系列一:tornado基础
- Spark性能优化指南——基础篇
- 唐老师写给同学们的一封信
- 深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)
- C语言4(数组)
- android 画一条分割线
- Terminal initialization failed; falling back to unsupported
- sorted()排序详解
- Java内存区域详解
- app在android 6.0或以上平台版本运行过程中请求权限
- 千里码之爬虫-1
- 犬曰牙隹居乐
- FZU 2233 ~APTX4869 贪心+并查集