#leetCode刷题纪实 Day9

https://leetcode-cn.com/problems/valid-parentheses/

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true

小菜鸡的尝试:

初读题目的时候觉得应该不会太复杂,也是一题很明显用栈解决的题目就上了

但中途还是踩了很多坑:

举两个我挂的例子吧:

"([)" "(()" 也因此有了第二稿和第三稿

                          

                    我的一稿                                                                     我的二稿                                                                 我的三稿

但觉得自己的代码非常不优雅,于是还是看看大佬的代码吧

观摩大佬的代码:

(大佬的代码是java,这是我看完以后自己写的c++) (连map都用的磕磕巴巴,wtcl)

 1 bool isValid(string s) {
 2         stack<char> main;
 3         int size = s.length();
 4         map<char, char> f;
 5 
 6         f[')'] = '(';
 7         f[']'] = '[';
 8         f['}'] = '{';
 9 
10         for (int i = 0; i < size; i ++) {
11             if (main.empty()) { // 空栈直接压入
12                 main.push(s[i]);
13                 continue;
14             }
15             if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
16                 if (main.top() != f[s[i]]) return false; // 如果是右括号但栈顶不是对应类型的左括号,返回false
17                 else main.pop();
18             } else { // 非右括号直接入栈
19                 main.push(s[i]);
20                 continue;
21             }
22         }
23         return main.empty(); // 如果执行完是空栈,即返回true
24     }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

猜你喜欢

转载自www.cnblogs.com/xyy999/p/11809589.html
今日推荐