用Python3实现LeetCode算法题系列——第20题 有效的括号 [Easy]
目录
1. 题目
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
2. 提交的代码
if len(s) == 1 or len(s) % 2 == 1:
return False
stack = [] # 模拟栈操作
for c in s:
if c in '([{': # 判断元素是否属于左括号,如果是则入栈
stack.append(c)
elif len(stack) == 0: # 如果没有左括号,则括号无效
return False
elif c == ')': # 发现右括号,寻找栈顶元素是否为左括号
if stack.pop() != '(': # pop()返回栈顶的项,并从堆栈中删除该项
return False
elif c == ']':
if stack.pop() != '[':
return False
else:
if stack.pop() != '{':
return False
if len(stack) > 0:
return False
return True
3. 运行效果
4. 完整代码
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s) == 1 or len(s) % 2 == 1:
return False
stack = [] # 模拟栈操作
for c in s:
if c in '([{': # 判断元素是否属于左括号,如果是则入栈
stack.append(c)
elif len(stack) == 0: # 如果没有左括号,则括号无效
return False
elif c == ')': # 发现右括号,寻找栈顶元素是否为左括号
if stack.pop() != '(': # pop()返回栈顶的项,并从堆栈中删除该项
return False
elif c == ']':
if stack.pop() != '[':
return False
else:
if stack.pop() != '{':
return False
if len(stack) > 0:
return False
return True
# def stringToString(input):
# return input[1:-1].decode('string_escape')
def main():
import sys
def readlines():
for line in sys.stdin:
yield line.strip('\n')
lines = readlines()
while True:
try:
line = next(lines)
# s = stringToString(line);
ret = Solution().isValid(line)
out = (ret);
print(out)
except StopIteration:
break
if __name__ == '__main__':
main()