以创意标题匹配问题为例
问题描述
在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 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"
仔细阅读问题描述和测试样例,我们应该会有一个思路,通配符可以用正则表达式中的 .* 来表示,表示任意字符的任意长度。只要用 .* 代替{xxx},然后再去看能否匹配titles里的字符串,就能解决问题。然后可以询问下ai这个编码思路是否可行,如下图,显然这个思路是可行的,同时可以要求ai也给出了相关代码框架。
在这一点AI对于编程新手是十分友好的,新手可能不清楚代码该怎么编写或者不熟悉利用第三方库,而AI能够给出思路,也能够分析新手思考到的思路,还能够给出代码框架,引导新手继续编写代码。
代码框架:
import re
def solution(n, template, titles):
def match(title):
pattern = re.sub(r'\{.*?\}', '.*', template)
regex = re.compile(pattern)
return bool(regex.fullmatch(title))
results = []
for title in titles:
results.append(match(title))
return ','.join(map(str, results))
面对不熟悉的代码,我们可以复制粘贴入对话框,让AI进一步解释。 如regex = re.compile(pattern),如果我们不太清楚re.compile的功能,我们可以让AI进行解释。 其回答为:
-
编译正则表达式
re.compile会将正则表达式编译成一个正则表达式对象。这个对象包含了正则表达式的解析树和优化后的匹配引擎。
-
提高匹配效率
- 编译后的正则表达式对象可以重复使用,而不需要每次都重新解析正则表达式。这可以显著提高匹配的效率,特别是在需要多次匹配的情况下。
-
代码可读性和维护性
- 使用
re.compile可以将正则表达式的编译和匹配逻辑分开,使代码更清晰、更易于维护。 - 编译后的正则表达式对象可以在多个地方复用,避免重复编写相同的正则表达式。
- 使用