7.创意标题匹配问题
大约 2 分钟
7.创意标题匹配问题
问题描述
在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 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"
实现代码:
function solution(n: number, template: string, titles: string[]): string {
// 提取通配符并生成正则表达式
const regexPattern = template.replace(/\{[^{}]*\}/g, ".*");
const regex = new RegExp(`^${regexPattern}$`);
// 匹配每个标题
const results = titles.map((title) => regex.test(title));
// 将结果转换为字符串
return results.map((result) => (result ? "True" : "False")).join(",");
}
function main() {
// You can add more test cases here
const testTitles1 = [
"adcdcefdfeffe",
"adcdcefdfeff",
"dcdcefdfeffe",
"adcdcfe",
];
const testTitles2 = [
"CLSomGhcQNvFuzENTAMLCqxBdj",
"CLSomNvFuXTASzENTAMLCqxBdj",
"CLSomFuXTASzExBdj",
"CLSoQNvFuMLCqxBdj",
"SovFuXTASzENTAMLCq",
"mGhcQNvFuXTASzENTAMLCqx",
];
const testTitles3 = ["abcdefg", "abefg", "efg"];
console.log(
solution(4, "ad{xyz}cdc{y}f{x}e", testTitles1) === "True,False,False,True"
);
console.log(
solution(6, "{xxx}h{cQ}N{vF}u{XTA}S{NTA}MLCq{yyy}", testTitles2) ===
"False,False,False,False,False,True"
);
console.log(solution(3, "a{bdc}efg", testTitles3) === "True,True,False");
}
main();
正则表达式/{[^{}]*}/g
也可以修改为/{[a-z,A-Z]*}/g
来进行匹配*
的意思是{0,}
0 个或以上个