Date:2022.03.16
题目描述
现在有一个字符串,你可以对这个字符串进行拆分,如 abcvsdaas 可以拆分为 abc|vs|d|aas,现在再给你一个字典,要求分割成的每一个子串必须要有包含其中的任意一个单词。那么最多可以分为几个子串呢?
输入格式
第一行,一行字符串
第二行一个正整数 N,表示字典中字符串的数量
接下来 N 行,每行一个字符串 Ai,表示字典中的一个字符串。
输出格式
一个整数,表示最多的分割数。
输入输出样例
输入 #1复制
asdsd
3
as
sd
ds
输出 #1复制
2
说明/提示
特殊情况:
如果原字符串不能被分割,请输出 0。
数据范围:
对于 20% 的数据,1≤∣s∣≤50,1≤n≤50。
对于 100% 的数据,1≤∣Ai∣≤∣s∣≤300,1≤N≤500。
其中,|s|,|Ai| 表示字符串 s 与 Ai 的长度。
思路①:问题即求出给定串最多包含几个子串,子串是可重复的(例:abab是两个ab),但不可交叉(例:abs,其中不能认定为含ab和bs两个子串)。
f[i]:f[i]:f[i]:以iii为结尾的串最多可分出几个子串。
设第jjj个子串为zc[j]zc[j]zc[j]状态转移方程:f[i]=max(f[i],f[i−zc[j].length()]+1)f[i]=max(f[i],f[i-zc[j].length()]+1)f[i]=max(f[i],f[i−zc[j].length()]+1)
【zc[j]==s.substr(i−zc[j].length()+1,i)∧i>=zc[j].length()】【zc[j]==s.substr(i-zc[j].length()+1,i) \wedge i>=zc[j].length()】【zc[j]==s.substr(i−zc[

该博客探讨了一道关于字符串分割的问题,其中涉及到动态规划和C++编程。博主首先介绍了问题背景,即如何根据给定的字典将字符串分割成最多包含字典中单词的子串,并提供了数据范围和输入输出样例。博主分享了两种解题思路,重点解释了状态转移方程,并指出了第一种方法的遗漏。尽管第一种尝试未能通过所有测试用例,但第二种思路修正了这个问题,实现了正确解法。
最低0.47元/天 解锁文章
633

被折叠的 条评论
为什么被折叠?



