设字符串下标从 \(1\) 开始。
询问特判掉 \(t_0,t_1\) 长度不同的情况。
把 \(s,t\) 两端重合的都缩掉,设 \(l_s\) 是最小的 \(i\) 使得 \(s_{0,i} \neq s_{1,i}\),\(r_s\) 是最大的,\(l_t,r_t\) 同理。
那么首先 \(s\) 能替换 \(t\) 的必要条件是 \(r_s - l_s = r_t - l_t\)。
另一个必要条件是 \(t_0[1 \dots r_t]\) 是 \(s_0[1 \dots r_s]\) 的后缀,\(t_1[l_t \dots len_t]\) 是 \(s_1[l_s\dots len_s]\) 的前缀。和上一个条件合起来就充要了。
上面说到的串都是确定的,和询问是什么没有关系。问题就转化成问有多少 \((s_0,s_1)\) 满足 \(s_0,s_1\) 分别是 \(t_0,t_1\) 的前缀。把所有 \(s\) 拿出来,按照 \(r_s - l_s\) 的长度分类之后对每个长度建一个 \(\text{trie}\),把树拍到 \(dfn\) 序上之后就是询问一个点被几个矩形覆盖,直接扫描线就行。
时间复杂度 \(O(L + n\log n)\),空间复杂度 \(O(L \left|\Sigma\right|)\)。
为什么我写题解老是笔误。