跳至主要內容

7.创意标题匹配问题

Mr.He大约 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 个或以上个