leetcode20.有效的括号
思路:有三种情况是不匹配的:左括号多,左右不匹配以及右括号多。代码实现时,遇到左括号就把相应的右括号加到栈里,遇到右括号就跟栈内元素对比,如果相同就删除,如果字符串便利完后栈不为空,或者遇到的右括号与栈顶元素不相同,或者字符串没遍历完栈就空了则说明不匹配,返回false。
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for item in s:
if item == '(':
stack.append(')')
elif item == '{':
stack.append('}')
elif item == '[':
stack.append(']')
elif not stack or stack[-1] != item:
return False
else:
stack.pop()
if not stack:
return True
else:
return False
leetcode1047.删除字符串中的所有相邻重复项
题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
思路:用栈来存放当前遍历的元素,每遍历一个元素就检查与栈顶是否哦相同,如果相同就删除栈顶元素,如果不同则当前元素入栈,为了方便输出可以采用字符串模拟栈的方法。
class Solution:
def removeDuplicates(self, s: str) -> str:
res = list()
for item in s:
if not res or item != res[-1]:
res.append(item)
else:
res.pop()
return "".join(res)
leetcode150.逆波兰表达式求值
题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)
思路:遇到数字就入栈,遇到操作符就从栈口弹出两个元素进行运算,得到的结果重新入栈,最后返回栈里最后一个元素