本文共 2260 字,大约阅读时间需要 7 分钟。
为了解决这个问题,我们需要找到两个字符串 s 和 t,其中 s 的非空前缀连起来能够形成 t 的前缀。具体来说,我们需要统计有多少个 s 的前缀是 t 的前缀。
方法思路
问题分析:
- 我们需要找到
s 的所有前缀,并检查这些前缀是否是 t 的前缀的一部分。 - 这可以通过预处理
s 和 t 的前缀哈希值来高效实现,以减少哈希冲突的概率。
哈希预处理:
- 预处理
s 和 t 的前缀哈希值和幂次数组。哈希值用于快速比较两个字符串的前缀是否相同,幂次数组用于计算哈希值。
比较前缀:
- 对于每个可能的前缀长度
k,检查 s 的前 k 个字符的哈希值是否等于 t 的前 k 个字符的哈希值。如果相等,则计数加一。
优化:
- 由于
s 和 t 的长度可能不同,我们只需要检查到两者长度较小的那个。
解决代码
#include #include #include #include #include #include #include
代码解释
读取输入:使用 read() 函数读取字符串 s 和 t。 预处理哈希数组:计算 s 和 t 的前缀哈希值和幂次数组,以便快速比较前缀。 哈希查询函数:get_hash 函数用于计算给定范围内的哈希值。 二分查找:对于每个可能的前缀长度 i,使用二分查找确定 s 的前 i 个字符是否是 t 的前缀的一部分。 统计结果:统计满足条件的前缀数量并输出结果。 转载地址:http://frrxz.baihongyu.com/