CF533E 字符串
正难则反。可以理解为,在 \(s, t\) 中各添加一个字符使得二者相等。由于题目保证 \(s \neq t\),显然最多只有 \(2\) 种不同的 \(w\)。
所有 \(s_i = t_i\) 的位置不用处理,找出 \(s_{l \ldots r} \neq t_{l \ldots r}\) 的最长区间 \([l, r]\)。
具体地,举出两个例子。
\[\begin{aligned}
\texttt{aaaab} \\
\texttt{caaaa}
\end{aligned}
\]
在区间 \([l, r)\) 内,\(s_i\) 对应 \(t_{i + 1}\),所以可以在 \(s, t\) 两端各添加一个字符以匹配对方。\(w\) 可以取 \(\texttt{caaaab}\)。反之,若有 \(s_i \neq t_{i + 1}\),则无法使用这种办法构造出 \(w\)。
\[\begin{aligned}
\texttt{baaaa} \\
\texttt{aaaac}
\end{aligned}
\]
同理,在区间 \([l, r)\) 内,\(s_{i + 1}\) 对应 \(t_i\),同样可以构造出 \(w = \texttt{baaaac}\)。反之,若有不匹配的位置,则无法用该办法构造。
在实现代码时,找出区间 \([l, r]\) 并判断 \([l, r)\) 中是否有 \(s_i \neq t_{i + 1}\) 或 \(s_{i + 1} \neq t_i\) 的情况,如果有,其构造方法就无法构造出 \(w\)。
可参考 代码 理解。

浙公网安备 33010602011771号