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\)

可参考 代码 理解。

posted @ 2024-07-12 14:06  Carrot-Meow~  阅读(8)  评论(0)    收藏  举报