CF1363F Rotating Substrings
题目描述
给定两个长度为 $n$ 的字符串 $s$ 和 $t$,均由小写拉丁字母组成。你需要将 $s$ 变为 $t$。
你可以对 $s$ 执行如下操作任意次:
- 选择 $s$ 的任意一个子串,并将其顺时针旋转一次。也就是说,如果选中的子串是 $s[l,l+1,\ldots,r]$,那么它会变为 $s[r,l,l+1,\ldots,r-1]$。$s$ 的其他字符保持不变。例如,对区间 $[2,4]$ 进行旋转,字符串 "abcde" 会变为 "adbce"。
字符串 $a$ 是字符串 $b$ 的子串,若 $a$ 可以通过从 $b$ 的开头删除若干(可能为零或全部)字符,并从结尾删除若干(可能为零或全部)字符得到。
请你求出将 $s$ 变为 $t$ 所需的最少操作次数,或者判断是否无法实现。
输入格式
输入的第一行包含一个整数 $t$ $(1\leq t \leq 2000)$,表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$ $(1\leq n \leq 2000)$,表示字符串的长度。
接下来的两行分别为字符串 $s$ 和 $t$。
所有测试用例中 $n$ 的总和不超过 $2000$。
输出格式
对于每个测试用例,输出一个整数,表示将 $s$ 变为 $t$ 所需的最少操作次数。如果无法实现,输出 $-1$。
说明/提示
对于第 $1$ 个测试用例,由于 $s$ 和 $t$ 相等,无需进行任何操作。
对于第 $2$ 个测试用例,只需对整个字符串 "ab" 进行一次操作即可变为 "ba"。
对于第 $3$ 个测试用例,只需对整个字符串 "abc" 进行一次操作即可变为 "cab"。
对于第 $4$ 个测试用例,需要进行两次操作:首先对整个字符串 "abc" 进行一次操作变为 "cab",然后对从第二个字符开始的长度为 $2$ 的子串进行一次操作变为 "cba"。
对于第 $5$ 个测试用例,只需对整个字符串 "abab" 进行一次操作即可变为 "baba"。
对于第 $6$ 个测试用例,无法将 $s$ 变为 $t$。
由 ChatGPT 4.1 翻译