1 条题解
-
0
题解
思路推导
设最终字符串的长度为 。其中前 个字符由 固定,后 个字符由 固定,两部分重叠了 个字符。
重叠可行,当且仅当 的长度为 的后缀等于 的长度为 的前缀。为了使最终字符串最短,应求最大的可行 ,答案为 。
特殊性质
当 中所有字符均相同时,任意后缀都只含同一个字符。最大重叠长度就是 开头连续出现该字符的数量,可以直接扫描得到。
当 中任意两个字符均不同时,若存在非空重叠,其起点字符必须等于 的首字符,而这个字符在 中至多出现一次。因此只需定位这一个候选起点,并检查对应的后缀和前缀是否相等。
做法
把字符串
t、一个不会出现在小写字母中的分隔符和字符串s依次连接,并计算连接串的前缀函数。最后一个位置的前缀函数值,正好是既为 的前缀、又为 的后缀的最长字符串长度,即最大重叠长度 。输出 。
正确性证明
若两部分重叠 个字符,则同一位置同时属于 的后缀与 的前缀,所以二者必须相等。反之,若这两个长度为 的字符串相等,就可以把它们重合,构造出长度为 的合法字符串。
因此,合法字符串与可行重叠长度对应,且长度随 增大而减小。前缀函数求得最大的可行 ,故所得字符串长度最小。
复杂度分析
一般做法的时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1027
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者