创意标题匹配问题(javascript版)-豆包marscode算法刷题

3 阅读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"

题解

function solution(n, template, titles) {
 // 正则表达式用于匹配通配符
 const wildcardPattern = /\{[^}]*\}/g;
    
 // 将模板中的通配符替换为正则表达式的匹配模式
 const regexString = template.replace(wildcardPattern, '(.*)');
 
 // 创建正则表达式对象
 const regex = new RegExp(`^${regexString}$`);
 
 // 检查每个标题是否匹配正则表达式
 const results = titles.map(title => regex.test(title));
 
 // 将布尔值数组转换为 "True,False" 格式的字符串
 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();

解题思路

  1. 正则表达式匹配通配符:使用正则表达式 {[^}]*} 来匹配模板中的通配符部分。
  2. 替换通配符:将模板中的每个通配符替换为 (.*),表示匹配任意数量的字符。
  3. 创建正则表达式对象:使用 new RegExp 创建一个正则表达式对象,确保整个字符串完全匹配。
  4. 检查匹配:使用 regex.test(title) 检查每个标题是否匹配生成的正则表达式,并返回一个布尔数组表示每个标题是否匹配。
  5. 格式化输出:将布尔值数组转换为 "True,False" 格式的字符串。