创意标题匹配问题-解题攻略

发布于:2025-02-12 ⋅ 阅读:(18) ⋅ 点赞:(0)

问题描述

在广告平台中,为了给广告主一定的自由性和效率,允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候,会根据用户的搜索词触发的 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"


核心思路

  1. 模板解析:提取模板中的固定文本序列(非通配符部分)
  2. 标题验证:检查标题是否满足固定文本的顺序和位置要求

完整代码实现

import java.util.ArrayList;
import java.util.List;

public class AdTemplateValidator {
   

    // 主入口方法
    public String validateTitles(int n, String template, List<String> titles) {
   
        List<String> fixedParts = parseTemplate(template);
        boolean startsWithFixed = !template.startsWith("{") && !fixedParts.isEmpty();
        boolean endsWithFixed = !template.endsWith("}") && !fixedParts.isEmpty();

        List<String> results = new ArrayList<><