稀土掘金创意匹配问题解答

47 阅读2分钟

创意标题匹配问题 问题描述 在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 bidword 对创意中的通配符(通配符是用成对 {} 括起来的字符串,可以包含 0 个或者多个字符)进行替换,用来提升广告投放体验。例如:“{末日血战} 上线送 SSR 英雄,三天集齐无敌阵容!”,会被替换成“帝国时代游戏下载上线送 SSR 英雄,三天集齐无敌阵容!”。给定一个含有通配符的创意和n个标题,判断这句标题是否从该创意替换生成的。

测试样例 样例1:

输入:n = 4, template = "ad{xyz}cdc{y}f{x}e", titles = ["adcdcefdfeffe", "adcdcefdfeff", "dcdcefdfeffe", "adcdcfe"] 输出:"True,False,False,True"

样例2:

输入:n = 3, template = "a{bdc}efg", titles = ["abcdefg", "abefg", "efg"] 输出:"True,True,False"

样例3:

输入:n = 5, template = "{abc}xyz{def}", titles = ["xyzdef", "abcdef", "abxyzdef", "xyz", "abxyz"] 输出:"True,False,True,True,True"

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")