题意就是给两个字符串a,c, 现在将b个a相连得到w, d个c相连得到p,现求最大的q, 使其q个p相连,并且 得到的字符串存在于w中 (字符匹配不用连续)其实就是问b个a中存在多少个c
先将字符串c预处理, 得到从当前字符开始得到的c的个数 并记录 跳转的下标
for(int i = 0; i < c.length; i++) {
int dd = i;
for(int j = 0; j < a.length; j++) {
if(a[j] == c[dd]) dd++;
if(dd >= c.length) times[i]++, dd = 0;
}
index[i] = dd;
}
然后开始模拟,先看1个a有多少个从当前下标开始得到的c个数, 加上去, 然后跳到跳转的下标, 再看第二个a有多少个从当前下标开始得到的c个数, 加上去 直到b
int sum = 0, dd = 0;
for(int i = 1; i <= b; i++) sum += times[dd], dd = index[dd];
答案就是sum / d;