问题描述
在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 bidword 对创意中的通配符(通配符是用成对 {} 括起来的字符串,可以包含 0 个或者多个字符)进行替换,用来提升广告投放体验。例如:“{末日血战} 上线送 SSR 英雄,三天集齐无敌阵容!”,会被替换成“帝国时代游戏下载上线送 SSR 英雄,三天集齐无敌阵容!”。给定一个含有通配符的创意和n个标题,判断这句标题是否从该创意替换生成的。 代码展示
import re
def solution(n, template, titles):
# Please write your code here
regex_pattern = ''
i = 0
while i < len(template):
if template[i] == '{':
# 找到通配符开始
i += 1
while i < len(template) and template[i] != '}':
i += 1
# 包含通配符,转换为 .*
regex_pattern += '.*'
else
regex_pattern += re.escape(template[i]) # 转义非通配符字符
i += 1
# 使用正则表达式进行匹配
regex = re.compile(f'^{regex_pattern}$') # 全匹配
results = [bool(regex.match(title)) for title in titles]
# 将 results 列表转换为逗号分隔的字符串
results_str = ','.join(map(str, results))
return results_str
if __name__ == "__main__":
# You can add more test cases here
testTitles1 = ["adcdcefdfeffe", "adcdcefdfeff", "dcdcefdfeffe", "adcdcfe"]
testTitles2 = ["CLSomGhcQNvFuzENTAMLCqxBdj", "CLSomNvFuXTASzENTAMLCqxBdj", "CLSomFuXTASzExBdj", "CLSoQNvFuMLCqxBdj", "SovFuXTASzENTAMLCq", "mGhcQNvFuXTASzENTAMLCqx"]
testTitles3 = ["abcdefg", "abefg", "efg"]
print(solution(4, "ad{xyz}cdc{y}f{x}e", testTitles1) == "True,False,False,True")
print(solution(6, "{xxx}h{cQ}N{vF}u{XTA}S{NTA}MLCq{yyy}", testTitles2) == "False,False,False,False,False,True")
print(solution(3, "a{bdc}efg", testTitles3) == "True,True,False")
一、问题理解
创意标题匹配问题通常是给定一组标准标题和一组待匹配的创意标题,需要判断创意标题是否与某个标准标题相匹配。匹配的标准可以根据具体需求定义,比如完全相同、包含特定关键词、语义相似等。
二、代码思路
1. 数据准备
-
定义存储标准标题和创意标题的数据结构,可以是列表、集合等。
-
将标准标题和创意标题分别存储到相应的数据结构中。 2. 匹配方法选择
-
如果是简单的完全相同匹配,可以直接遍历创意标题列表,对于每个创意标题,遍历标准标题列表进行比较。
-
如果是关键词匹配,可以先提取标准标题和创意标题中的关键词,然后进行关键词的比较。
-
对于语义相似匹配,可以考虑使用自然语言处理技术,如词向量表示和余弦相似度计算等。 3. 结果存储与输出
-
对于每个创意标题,根据匹配结果进行标记或存储到特定的数据结构中。
-
最后可以输出匹配结果,比如哪些创意标题与哪些标准标题匹配成功。
三、代码分析
1. 时间复杂度
-
在上述代码中,使用了两层循环进行匹配,时间复杂度为 O(m * n),其中 m 是创意标题的数量,n 是标准标题的数量。 2. 空间复杂度
-
代码中主要使用了几个列表来存储标题和匹配结果,空间复杂度取决于标题的数量和长度,假设每个标题的平均长度为 k,则空间复杂度为 O(m * k + n * k + p * k),其中 p 是匹配结果的数量。 3. 优化方向
-
对于大规模的标题集合,可以考虑使用哈希表等数据结构来加速匹配过程,将标准标题存储到哈希表中,然后遍历创意标题进行查找,时间复杂度可以降低到 O(m + n)。
-
如果是关键词匹配,可以使用倒排索引等数据结构,预先处理标准标题和创意标题中的关键词,提高匹配效率。
-
对于语义相似匹配,可以使用更复杂的自然语言处理模型,但这会增加计算复杂度和时间开销。
总之,创意标题匹配问题的代码实现需要根据具体的匹配需求选择合适的方法,并通过分析代码的时间复杂度和空间复杂度来评估和优化算法的性能。