堆栈(Stack):一种抽象线性表数据结构,允许在表的一端按照先入后出(FIFO)的方式进行插入和删除操作。
计算机中的函数调用过程也是符合“栈”的“后进先出”的规律。父函数调用子函数是,子函数入栈,等子函数执行完毕时出栈接着执行父函数。
括号匹配是“栈”的经典应用。
- 按照正反括号进行配对,正括号入栈,反括号出栈并且匹配。
- 能匹配上就顺利出栈,不能匹配说明是无效括号串。
最后所有括号都顺利匹配出栈(栈空)就说明是合法括号串。
class Solution:def isValid(self, s: str) -> bool:if len(s) % 2 == 1:return Falseparentheses = {'(':')', '[':']', '{':'}'}stack = []for ch in s:if ch in parentheses.keys():stack.append(ch)else:if ch in parentheses.values() and len(stack) > 0 and ch == parentheses.get(stack[-1]):stack.pop()else:return Falsereturn len(stack) == 0
实现图的深拷贝。DFS和BFS都可以对图进行遍历,使用DFS的方式实现深拷贝。
"""# Definition for a Node.class Node:def __init__(self, val = 0, neighbors = None):self.val = valself.neighbors = neighbors if neighbors is not None else []"""class Solution:def dfs(self, node, clone):if node in clone:return clone[node]new_node = Node(node.val, [])clone[node] = new_nodefor neighbor in node.neighbors:new_node.neighbors.append(self.dfs(neighbor, clone))return new_nodedef cloneGraph(self, node: 'Node') -> 'Node':if node is None:return Noneclone = {}return self.dfs(node, clone)
