首页 > 试题广场 >

寻找子串

[编程题]寻找子串
  • 热度指数:2898 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给出 个字符串 S1S2...Sm 和一个单独的字符串 。请在 中选出尽可能多的子串同时满足:  
1)这些子串在 中互不相交。 
2)这些子串都是 S1S2...Sm 中的某个串。
问最多能选出多少个子串。

数据范围: ,输入的每个字符串长度满足

输入描述:
第一行一个数m(1≤m≤10),接下来m行,每行一个串。最后一行输入一个串T。输入中所有单个串的长度不超过100000,串中只会出现小写字母。


输出描述:
输出一个数,最多能选出多少串。
示例1

输入

3
aa
b
ac
bbaac

输出

3

说明

可选 b b aa 或 b b ac 
头像 烤冷面加辣白菜
发表于 2020-03-23 19:22:19
#include <iostream> #include <string.h> using namespace std; int m; const int maxn=100005; char T[maxn],S[15][maxn]; struct node { i 展开全文
头像 重生之我要当分子
发表于 2025-01-01 14:28:13
解题思路 这是一个字符串匹配和动态规划问题。使用 算法找到所有模式串的匹配位置,然后用动态规划求解最大不相交子串数量。 关键点: 使用 算法高效查找所有匹配位置 用动态规划数组 表示到位置 的最大不相交子串数量 对每个位置,考虑是否选择以该位置结尾的匹配 算法步骤: 对每个模式串进行 展开全文