"""
https://www.lanqiao.cn/problems/3751/learning/?page=1&first_category_id=1&problem_id=3751
"""
# 字典树
import os
import sys
# 请在此输入您的代码
class Treenode:
def __init__(self):
self.nodes = {} # 字典记录当前节点的子节点, 用键值对表示一个子节点
self.isleaf = False # 当前节点是否表示一个字符串
self.cnt = 0 # 当前前缀数目
# val = 1表示插入、val = -1表示删除
def insert(self, s, val):
curr = self
for c in s:
if c not in curr.nodes.keys():
# 将节点c添加加
curr.nodes[c] = Treenode()
# 当前节点为节点c
curr = curr.nodes[c]
curr.cnt += val
# 叶子节点
curr.isleaf = True
# 找与s匹配的最长公共前缀
def common_prex(self, s):
curr = self
res = 0
for c in s:
curr = curr.nodes[c]
if curr.cnt == 0:
return res
res += 1
return res
root = Treenode()
N = int(input())
S = []
for _ in range(N):
s = input()
# 将字符串s加到字典树中
root.insert(s, 1)
S.append(s)
for s in S:
# 当前路暂时删掉: 因为题目要求不与s自身进行相似度匹配
root.insert(s, -1)
print(root.common_prex(s))
# 删完后,记得再加上
root.insert(s, 1)
蓝桥杯-依依的瓶中信
最新推荐文章于 2024-07-18 19:36:20 发布