创意标题匹配问题 | 豆包MarsCode AI刷题

75 阅读2分钟

在广告平台中,广告主可以通过通配符的方式提交广告标题,以增加创意的灵活性和效率。通配符用成对的花括号 {} 括起来,可以包含任意数量的字符。线上服务时,系统会根据用户的搜索词触发的 bidword 对创意中的通配符进行替换,以提升广告投放体验。例如,广告标题“{末日血战} 上线送 SSR 英雄,三天集齐无敌阵容!”可能会被替换成“帝国时代游戏下载上线送 SSR 英雄,三天集齐无敌阵容!”。

本题的目标是给定一个含有通配符的创意模板和一组标题,判断这些标题是否是从该创意模板替换生成的。

问题分析

输入与输出

  • 输入

    • n:标题的数量。
    • template:含有通配符的创意模板。
    • titles:一组标题。
  • 输出

    • 一个字符串,表示每个标题是否从模板生成,格式为 "True,False,False,True"

关键点

  1. 通配符的处理:通配符用 {} 括起来,可以包含任意数量的字符。在模板中,通配符可以出现在任意位置,并且可以有多个通配符。
  2. 匹配规则:标题必须完全匹配模板,包括通配符和固定字符的位置和顺序。

解题思路

数据结构选择

  • 正则表达式:由于模板中包含通配符,使用正则表达式可以方便地处理通配符的匹配问题。

算法步骤

  1. 解析模板

    • 将模板中的通配符 {} 替换为正则表达式的通配符 (.*?),表示匹配任意字符(非贪婪模式)。
    • 在模板的前后添加 ^ 和 $,表示匹配整个字符串的开头和结尾。
  2. 遍历标题

    • 对于每个标题,使用正则表达式的 re.match 方法判断是否匹配模板。
    • 如果匹配成功,则标题是从模板生成的,否则不是。
  3. 存储结果

    • 将每个标题的匹配结果存储在一个列表中。
    • 最后将列表转换为字符串,格式为 "True,False,False,True"

代码实现

以下是使用 Python 实现的代码框架:

python

import re

def solution(n, template, titles):

    # 解析模板,提取通配符和固定字符

    pattern = re.sub(r'{.*?}', '{}

    ', template)

    pattern = '^' + pattern.replace

    ('{}', '(.*?)') + '$'

    

    # 用于存储结果

    results = []

    

    # 遍历每个标题,判断是否匹配模板

    for title in titles:

        if re.match(pattern, title):

            results.append("True")

        else:

            results.append("False")

    

    # 将结果列表转换为字符串

    return ",".join(results)

if name == "main":

    # 你可以添加更多测试用例

    testTitles1 = ["adcdcefdfeffe", 

    "adcdcefdfeff", "dcdcefdfeffe", 

    "adcdcfe"]

    testTitles2 = 

    ["CLSomGhcQNvFuzENTAMLCqxBdj", 

    "CLSomNvFuXTASzENTAMLCqxBdj", 

    "CLSomFuXTASzExBdj", 

    "CLSoQNvFuMLCqxBdj", 

    "SovFuXTASzENTAMLCq", 

    "mGhcQNvFuXTASzENTAMLCqx"]

    testTitles3 = ["abcdefg", 

    "abefg", "efg"]

    print(solution(4, "ad{xyz}cdc{y}

    f{x}e", testTitles1) == "True,

    False,False,True")

    print(solution(6, "{xxx}h{cQ}N

    {vF}u{XTA}S{NTA}MLCq{yyy}", 

    testTitles2) == "False,False,

    False,False,False,True")

    print(solution(3, "a{bdc}efg", 

    testTitles3) == "True,True,

    False")

总结

本题的核心在于如何处理模板中的通配符,并将其转换为正则表达式进行匹配。通过正则表达式,我们可以灵活地处理通配符的匹配问题,并且能够高效地判断标题是否从模板生成。在实际应用中,这种技术可以广泛应用于广告创意的生成和匹配,提升广告投放的精准度和用户体验。