给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"输出: true
示例 2:
输入: "()[]{}"输出: true
示例 3:
输入: "(]"输出: false
示例 4:
输入: "([)]"输出: false
示例 5:
输入: "{[]}"输出: true
分析:
字符串一定是偶数个
第一个出现的字符一定是开括号
第一个出现的闭括号一定是与最近的开括号匹配
初始化一个数组
处理表达式的每个括号,当遇到开阔号,就放入到数组中,当遇到闭括号时检查 与数据中的最后一个开括号是否匹配,如果匹配就把这个开括号从数组移除,并继续处理,如果不匹配则表达式不匹配
最后如果过这个数组还有元素,说明表达式无效
解:
class SolutionBracket: def isValid(self, s: str): """ :param s: :return: """ mapps = {')': '(', ']': '[', '}': '{'} stack = [] if len(s) % 2 == 0 and s[0] in mapps.values(): for i in s: if i in mapps.values(): stack.append(i) else: elma = stack.pop() if stack else '#' if elma != mapps[i]: return False else: return False return not stackif __name__ == '__main__': b = "()[]{}" f = "{{{}" so = SolutionBracket() print(so.isValid(g))
拓展
如果字符串是一个类型的括号,可以用计数的方式实现,这个实现比较简答
初始化计数器为0
迭代字符串,遇到开括号计数器+1,否则-1
当计数器不为零的时候说明不是有效的表达式
解:
class SolutionBracket: def isValid(self, s: str,c:str): """ :param s:传入的字符串 :param c: 传入的括号类型如:'(','[','{' :return: """ num=0 for i in s: if i==c: num+=1 else: num-=1 return not numif __name__ == '__main__': b = "()()()" f = "((((())))" so = SolutionBracket() print(so.isValid(f,'('))