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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。