首页 > 试题广场 >

重复词

[编程题]重复词
  • 热度指数:1944 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

对于两个字符串B和C,我们定义BC为将C接在B的后面形成的新串。一个字符串P是串A的前缀,当且仅当存在B使得A=PB,当然B可以为空串。若P!=A,则我们称P为A的真前缀。现在定义重复词。串Q是串A的重复词当且仅当Q是A的真前缀,且A是QQ的前缀。而A的最长重复词则是A的重复词中最长的一个,或者空串(当A没有任何重复串时)。如ababab的最长重复词是abab;abc的最长重复词是空串。

给定一个串s(由字母组成),及它的长度n(1≤n≤100000),请返回s的所有前缀的最长重复词的长度之和(空串长度为0)。

测试样例:
8,"babababa"
返回:24
头像 重生之我要当分子
发表于 2025-01-03 00:01:12
解题思路 这是一个字符串前缀的最长重复词问题。需要找到每个前缀的最长重复词,并计算所有长度之和。 关键点: 重复词必须是真前缀 原串必须是重复词两次的前缀 使用动态规划记录每个位置的最长重复词长度 优化字符串匹配过程 算法步骤: 找到与首字符相同的所有位置 从后向前检查每个可能的重复词 验证重 展开全文