【青训入营】创意标题匹配问题

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

正则匹配

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public class Main {
    
    public static String solution(int n, String template, String[] titles) {
        // 将模板转换为正则表达式
        String regex = template.replaceAll("\\{[^}]*}", ".*");
        regex = "^" + regex + "$"; // 确保匹配整个字符串
        
        // 创建一个StringBuilder来存储结果
        StringBuilder result = new StringBuilder();
        
        // 检查每个标题是否匹配正则表达式
        for (int i = 0; i < n; i++) {
            if (Pattern.matches(regex, titles[i])) {
                result.append("True");
            } else {
                result.append("False");
            }
            if (i < n - 1) {
                result.append(",");
            }
        }
        
        return result.toString();
    }

    public static void main(String[] args) {
        //  You can add more test cases here
        String[] testTitles1 = {"adcdcefdfeffe", "adcdcefdfeff", "dcdcefdfeffe", "adcdcfe"};
        String[] testTitles2 = {"CLSomGhcQNvFuzENTAMLCqxBdj", "CLSomNvFuXTASzENTAMLCqxBdj", "CLSomFuXTASzExBdj", "CLSoQNvFuMLCqxBdj", "SovFuXTASzENTAMLCq", "mGhcQNvFuXTASzENTAMLCqx"};
        String[] testTitles3 = {"abcdefg", "abefg", "efg"};

        System.out.println(solution(4, "ad{xyz}cdc{y}f{x}e", testTitles1).equals("True,False,False,True"));
        System.out.println(solution(6, "{xxx}h{cQ}N{vF}u{XTA}S{NTA}MLCq{yyy}", testTitles2).equals("False,False,False,False,False,True"));
        System.out.println(solution(3, "a{bdc}efg", testTitles3).equals("True,True,False"));
    }
}

### C++ 中实现创意标题匹配 为了实现在C++中的创意标题匹配功能,可以采用字符串处理技术以及正则表达式库来解析和比较不同形式的标题。下面提供一种基于标准库`<regex>`的方法来进行模式匹配。 #### 使用正则表达式的创意标题匹配方案 通过定义灵活的正则表达式规则集,能够有效地识别各种变体版本的目标标题。这不仅限于简单的全词匹配,还可以支持更复杂的语义理解需求。 ```cpp #include <iostream> #include <string> #include <vector> #include <regex> bool matchCreativeTitle(const std::string& title, const std::string& pattern) { try { // 构建正则对象 std::regex re(pattern); // 进行匹配操作 return std::regex_search(title, re); } catch (const std::regex_error& e) { // 处理可能发生的异常情况 std::cerr << "Regex error: " << e.what() << '\n'; throw; } } int main() { // 测试数据准备 std::vector<std::pair<std::string, std::string>> testData = { {"The Great Gatsby", "(?i)^the great gatsby$"}, // 忽略大小写的完全匹配 {"Gone with the Wind.", "^gone.*wind\\.$"} // 部分模糊匹配 }; for(auto &item : testData){ bool result = matchCreativeTitle(item.first, item.second); std::cout << "\"" << item.first << "\" matches \"" << item.second << "\": " << (result ? "Yes" : "No") << std::endl; } return 0; } ``` 此代码片段展示了如何利用C++11引入的标准正则表达式特性[^1] 来构建一个简易版的创意标题匹配器。该函数接受两个参数:一个是待检测的实际标题文本;另一个是要查找的模式串。它会返回布尔值表示是否存在符合条件的结果。 对于更加复杂的应用场景,则建议考虑集成第三方自然语言处理工具或服务API接口,从而获得更为精准高效的匹配效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值