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