本文共 2021 字,大约阅读时间需要 6 分钟。
题目链接:
题目大意:
给出两个字符串
s s s 、
t t t ,求有多少对
s s s 的非空前缀连起来是
t t t 的前缀
题目分析:
我们可以先枚举
t t t 的每一个位置
如果
s [ i ] ≠ t [ i ] s[i]\not=t[i] s[i]=t[i] 显然用
s s s 的前
i i i 个字符不可能凑成
t t t 的一个子串(因为
s [ i ] s[i] s[i] 和
t [ i ] t[i] t[i] 不同)
如果
s [ i ] = t [ i ] s[i]=t[i] s[i]=t[i] 我们可以二分来找用
s . s u b s t r ( 1 , i ) s.substr(1,i) s.substr(1,i) 和其子串能构成
t t t 的子串的方案数,具体方法如下:
前
i i i 位
s s s 与
t t t 相同,之后再用哈希判断
s . s u b s t r ( 1 , i ) s.substr(1,i) s.substr(1,i) 的子串是否可以继续匹配,此题我使用了双哈希
具体细节见代码:
#include #include #include #include #include #include #include #include
转载地址:http://frrxz.baihongyu.com/