【leetcode刷题】20T14-有效的括号
- 2020 年 2 月 16 日
- 筆記
木又同学2020年第14篇解题报告
leetcode第20题:有效的括号
https://leetcode-cn.com/problems/valid-parentheses/
【题目】
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。
示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true
【思路】
开心~又一次写完代码,一跑,全部通过
本题是栈的典型应用。遍历字符串,如果遇到'{'、'['、'}'这三个字符,则压栈;否则,判断栈是否为空,同时字符与栈顶元素是否对应,若任何一个条件不满足,则返回False。循环结束后,判断栈是否为空,如为空,则返回True。
【代码】
python版本
class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ # 奇数个,肯定不行 if len(s) % 2 != 0: return False # 空字符串,返回True if s == '': return True d = {')': '(', ']': '[', '}': '{'} # 使用栈来存储 stack = [] for si in s: # 压栈 if si in '([{': stack.append(si) # 弹栈 else: if len(stack) == 0 or d[si] != stack[-1]: return False stack.pop() return len(stack) == 0
C++版本
class Solution { public: bool isValid(string s) { if (s.size() % 2 != 0) return false; stack<char> res; bool flag = true; for (auto si: s) { if (si == '(' || si == '[' || si == '{') { res.push(si); } else { // 栈是否为空 if (res.size() == 0) { flag = false; break; } // 元素是否对应 if ((res.top() == '(' && si == ')') || (res.top() == '[' && si == ']') || (res.top() == '{' && si == '}')) { res.pop(); } else { flag = false; break; } } } return flag && res.size() == 0; } };