#arc157f. [arc157_f]XY Ladder LCS
[arc157_f]XY Ladder LCS
题目描述
给定长度为 的字符串 和 ,它们由字符 X
和 Y
组成。对于每个 ,你可以交换 的第 个字符和 的第 个字符,也可以选择不交换。这个过程会产生 对字符串,包括重复的。找到最长的字符串,它是这些字符串中某一对的公共子序列(不一定连续的)。如果存在多个这样的字符串,则找到字典序最小的。
什么是公共子序列?字符串 的一个子序列是通过删除 中零个或多个字符,并在不改变顺序的情况下连接剩余字符得到的字符串。字符串 和 的一个公共子序列是同时是 和 的子序列的字符串。(参见示例输出 1)
约束条件
- 和 的长度均为 ,由字符
X
和Y
组成。
输入
输入以以下格式从标准输入给出:
输出
打印能够成为结果字符串的公共子序列中字典序最小且最长的字符串。
示例一
3
XXX
YYY
示例一输出
XY
- 如果不进行任何交换,
XXX
和YYY
的唯一公共子序列是空字符串。 - 如果交换第 个字符,
YXX
和XYY
的公共子序列有空字符串、X
和Y
。 - 如果交换第 个字符,
XYX
和YXY
的公共子序列有空字符串、X
、Y
、XY
和YX
。 - 如果交换第 个字符,
XXY
和YYX
的公共子序列有空字符串、X
和Y
。
进行两次或多次交换等价于将 和 自身交换后进行一次交换。因此,能够成为公共子序列的最长字符串是 XY
和 YX
。其中字典序较小的 XY
是答案。
示例二
1
X
Y
示例二输出
答案可以是空字符串。
示例三
4
XXYX
YYYY
示例三输出
XYY
例如,只交换第 个字符后,XYY
将成为公共子序列。长度更长或字典序更小的字符串在任意交换组合后都不会成为公共子序列,因此 XYY
是答案。