【LeetCode】20 Valid Parentheses (c++实现)
2015-12-17 00:00
260 查看
Given a string containing just the characters
The brackets must close in the correct order,
题目的意思就是括号是否能正常关闭,也就是说括号要成对出现,并且要保证括号的顺序。看到括号的匹配,第一反应就是算法书中栈的一个应用场景:如果出现了左括号,则将其压进栈中,如果是右括号,则判断栈的top数据是否和该右括号对应,如果是,则出栈。这个题目,因为输入只有左右括号,也就不用去做入参检验了,降低了一点工作量。需要注意的是,最后需要判断栈是否为空,也就是判断是否所有的括号都正常关闭了。代码如下:
上面的代码中,getPair方法,是获取右括号匹配的左括号,我这里就是通过switch语句直接输出,当然,也可以用vector或者map等方式,不过这个不是重点。
提交了之后,0ms,还算不错。之后看了discussion中hot question,发现了一些除了stack之外的做法,一个是递归,另一个是动态规划,有兴趣的朋友可以思考一下。
'(',
')',
'{',
'}',
'['and
']', determine if the input string is valid.
The brackets must close in the correct order,
"()"and
"()[]{}"are all valid but
"(]"and
"([)]"are not.
题目的意思就是括号是否能正常关闭,也就是说括号要成对出现,并且要保证括号的顺序。看到括号的匹配,第一反应就是算法书中栈的一个应用场景:如果出现了左括号,则将其压进栈中,如果是右括号,则判断栈的top数据是否和该右括号对应,如果是,则出栈。这个题目,因为输入只有左右括号,也就不用去做入参检验了,降低了一点工作量。需要注意的是,最后需要判断栈是否为空,也就是判断是否所有的括号都正常关闭了。代码如下:
class Solution {public:char getPair(char c) {char ret = 0;switch (c) {case ')': ret = '(';break;case '}': ret = '{';break;case ']': ret = '[';break;default:break; }return ret; }bool isValid(string s) { stack<char> st;for (int i = 0; i < (int)s.length(); i++) {char c = s[i];char ret = getPair(c);if (0 == ret) { st.push(c); } else {if (st.empty() || st.top() != ret) {return false; } st.pop(); } }return st.empty(); } };
上面的代码中,getPair方法,是获取右括号匹配的左括号,我这里就是通过switch语句直接输出,当然,也可以用vector或者map等方式,不过这个不是重点。
提交了之后,0ms,还算不错。之后看了discussion中hot question,发现了一些除了stack之外的做法,一个是递归,另一个是动态规划,有兴趣的朋友可以思考一下。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Linux C函数参考手册(PDF版)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(十七):C API简介
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C++联合体转换成C#结构的实现方法