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

124 阅读2分钟

要解决这个问题,我们需要判断给定的标题是否可以通过替换模板中的通配符生成。通配符是用成对的 {} 括起来的字符串,可以替换为任意字符串(包括空字符串)。我们可以通过以下步骤来实现:

解题思路

  • 解析模板:

  • 首先,我们需要解析模板字符串,将其分割成固定部分和通配符部分。

  • 固定部分是模板中不在 {} 内的字符串,通配符部分是 {} 内的字符串。

  • 匹配标题:

  • 对于每个标题,尝试匹配解析后的固定部分。

  • 在匹配过程中,通配符部分可以匹配任意字符串。

  • 需要确保固定部分在标题中按顺序出现,并且通配符部分可以填充标题中间的任意字符。

  • 实现步骤:

  • 使用正则表达式来解析模板,将其分割成固定部分。

  • 对于每个标题,逐一检查固定部分是否按顺序出现在标题中。

代码实现

import re

def is_generated_from_template(template, titles):
    # 使用正则表达式解析模板,提取固定部分
    parts = re.split(r'\{.*?\}', template)
    
    results = []
    for title in titles:
        # 从标题中逐一匹配固定部分
        start = 0
        match = True
        for part in parts:
            # 查找固定部分在标题中的位置
            index = title.find(part, start)
            if index == -1:
                match = False
                break
            # 更新下一个查找的起始位置
            start = index + len(part)
        
        results.append(match)
    
    return results

复杂度分析

  • 时间复杂度:对于每个标题,我们需要遍历模板的固定部分并在标题中查找,因此时间复杂度为 𝑂(𝑚×𝑛)O(m×n),其中 𝑚m 是标题的数量,𝑛n 是模板的长度。

  • 空间复杂度:主要用于存储解析后的固定部分,空间复杂度为 𝑂(𝑘)O(k),其中 𝑘k 是固定部分的数量。

通过这种方法,我们可以有效地判断每个标题是否可以通过替换模板中的通配符生成。