桌子上有一排排成一排。每个人都有一个字母。你的任务是重新排列那些砖块,使它们上面的字母创建一些指定的铭文。在重新安排时,您只能用指定的字母交换相邻的砖块(您将获得m对(a1,b1),...,(am,bm),并且您只能在其中一个上交换砖块,并且可以在第二,对于一些i = 1,..,m)。您应该检查是否可以实现这一点 - 如果是 - 计算所需的最小交换次数。
输入
输入的第一行有一个整数c。然后c测试用例如下:每个测试用例由两行小写字母(a..z)组成,长度不超过100000(起始和结束配置的描述),下一行中有一个整数m,然后有两行字母的m行ai,bi in each。
输出
对于每个测试用例,如果无法重新排列砖块,则应打印-1;如果可能,则应打印最小数量的交换(如果可以,则输出此值模数为232)。
Input:
4
ab
ba
0
abc
cba
3
ab
cb
ca
cabbbc
cbabbc
1
ab
abba
baab
1
ab
Output:
-1
3
1
2
我不明白这个问题可以让任何人帮助我理解测试用例,不需要指导我提供提示和算法只是解释我的问题,而不是
答案 0 :(得分:1)
你有4个测试用例。
Case 1:
start config: `ab`
end config: `ba`
allowed adjacent swaps: none
result: -1 - without any allowed swap, you can't get from `ab` to `ba`
Case 2:
start config: `abc`
end config: `cba`
allowed adjacent swaps: `(ab)`,`(cb)`,`(ca)`
result: 3
example solution: `abc -> (cb)@(1,2) -> acb -> (ca)@(0,1) -> cab -> (ab)@(1,2) -> cba`
Case 3:
start config: `cabbbc`
end config: `cbabbc`
allowed adjacent swaps: `(ab)`
result: 3
example solution: `cabbbc -> (ab)@(1,2) -> cabbbc`
Case 4:
start config: `abba`
end config: `baab`
allowed adjacent swaps: `(ab)`
result: 2
example solution: `abba -> (ab)@(2,3) -> abab -> (ab)@(0,1) -> baab`
答案 1 :(得分:0)
4 - 4 testcases
(now two lines which were said, they define strings to swap one into another)
ab
ba
0 - zero strings which define bricks
Now, you can't rearrange nothing, because you have no strigns. return -1.
Now the secons testcase:
(two lines which define strings to trasform one into another)
abc
cba
3 - three bricks
ab
cb
ca
And above we ahve three bricks. So we can, to my understanding, swap these bricks letters, so swap a with b, c with b, and c with a, so basically all possible swaps are allowed).
Third testcase - analogical to the second, but you're only allowed to swap "a" with "b".
cabbbc
cbabbc
1
ab
And so on...
abba
baab
1
ab
这是我对任务的理解。
答案 2 :(得分:0)
测试用例是开始和结束位置(两行字符),后跟一个数字。该数字描述了有多少可能的转换。然后有可能的过渡。因此,在您的示例中,第一个测试用例是“当没有可以交换的字母时,从ab到ba需要多少步骤?” (答案-1是“不可能”的答案。)第二个测试案例是“如果可以交换ab,cb或ca,从abc到cba需要多少步骤?”答案是3.第三个测试案例是“如果可以交换ab,从cabbbc到cbabbc需要多少步骤?”等
答案 3 :(得分:0)
让我解释测试用例(按重新排列的顺序)
ab
ba
0
您不能从“ab”到“ba”,因为不允许掉期=>输出-1
cabbbc
cbabbc
1
ab
您可以交换相邻的a
和b
,只需在第二个和第三个字符上执行一次即可。 =>输出1
abba
baab
1
ab
同样,前两个和后两个,使两个交换=>输出2
abc
cba
3
ab
cb
ca
您无法直接交换a
和c
,因为它们不相邻。相反,将a
与b
交换并获取bac
。然后,将a
与c
交换,然后获取bca
。最后,与b
交换c
并获取cba
=>输出3
如果你可以将“ab”换成“ba”,你也可以将“ba”换成“ab”。这在任务描述中并不明显,但样本测试用例明确了这一点。