编写一个程序或函数,给定两个ASCII字符串A
和B
,它们将产生字符串,A'
并且B'
在公共子字符串的位置将其反转。查找过程A'
如下:
A'
最初是空的。- 如果的第一个字符
A
位于中B
,则找到的最长前缀A
是的子字符串B
。从中删除此前缀A
,并将其反转添加到中A'
。 - 否则,从中删除该第一个字符
A
并将其添加到中A'
。 - 重复步骤2-3,直到
A
为空。
查找B'
的方法与此类似。
例
让我们考虑一下字符串A = "abc bab"
和B = "abdabc"
。对于A'
,会发生以下情况:
A = "abc bab"
:第一个字符"a"
在B中,而A的最长前缀在B中发现"abc"
。我们从A删除此前缀,并将其反转添加"cba"
到A'。A = " bab"
:第一个字符" "
不在B中,因此我们从A中删除了该字符并将其添加到A'中。A = "bab"
:第一个字符"b"
在B中,并且在B中找到的A的最长前缀是"b"
。我们从A删除该前缀,并将其反转(仍为"b"
)添加到A'。A = "ab"
:第一个字符"a"
在B中,而A的最长前缀在B中发现"ab"
。我们从A删除此前缀,并将其反转添加"ba"
到A'。A = ""
:A为空,因此我们停止。
这样我们得到A' = "cba" + " " + "b" + "ba" = "cba bba"
。对于B',过程类似:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
这样我们得到B' = "ba" + "d" + "cba" = "badcba"
。
最后,我们返回两个字符串,即
(A', B') = ("cba bba", "badcba")
测试用例
"abc bab", "abdabc" -> "cba bba", "badcba"
"abcde", "abcd bcde" -> "dcbae", "dcba edcb"
"hello test", "test banana" -> "hello tset", "tset banana"
"birds flying high", "whistling high nerds" -> "bisdr flyhgih gni", "wihstlhgih gni nesdr"
以字节为单位的最短代码获胜。
@TimmyD确切的输入/输出格式是您的选择。您可能不会假定输入的是小写ASCII码-它可以是任何可打印的ASCII码。
—
orlp
空字符串是否合法输入?
—
MtnViewMark 2015年
@MtnViewMark是的。
—
orlp
"cba bba", "badcba"
引号和逗号?