#利用字典实现前缀树
trie = {}
# 建立字典实现的字母前缀树
for word in words:
    cur = trie
    for alpha in word:
        cur=cur.setdefault(alpha,{})
#配合哈希与双向链表实现O(1)的查找以及增删复杂度
class Node:
    def __init__(self,key,value):
        self.key=key
        self.value=value
        self.next=None
        self.pre=None
class LRUCache:
    def __init__(self, capacity: int):
        self.dic=dict()
        self.capacity=capacity
        self.size=0
        self.head=Node(-1,-1)
        self.tail=Node(-1,-1)
        self.head.next=self.tail
        self.tail.pre=self.head
    def get(self, key: int) -> int:
        if(key in self.dic):
            new_node = Node(key, self.dic[key].value)
            # 删除旧节点
            del_node = self.dic[key]
            del_node.pre.next = del_node.next
            del_node.next.pre = del_node.pre
            # 添加新节点到头部
            new_node.pre = self.head
            new_node.next = self.head.next
            self.head.next.pre = new_node
            self.head.next = new_node
            self.dic[key]=new_node
            return self.dic[key].value
        else:
            return -1
    def put(self, key: int, value: int) -> None:
        new_node = Node(key, value)
        # 添加新节点到头部
        new_node.pre = self.head
        new_node.next = self.head.next
        self.head.next.pre = new_node
        self.head.next = new_node
        if(key in self.dic):
            del_node=self.dic[key]
            del_node.pre.next=del_node.next
            del_node.next.pre=del_node.pre
        else:
            # 如果key不在链表中,才考虑删去尾元素或者更改size
            if(self.size==self.capacity):
                # 如果满了,要删去尾部节点
                self.dic.pop(self.tail.pre.key)
                self.tail.pre.pre.next=self.tail
                self.tail.pre=self.tail.pre.pre
            else:
                self.size+=1
        self.dic[key] = new_node
原文:https://www.cnblogs.com/heyjjjjj/p/13837283.html