给定两个字符串,找到两者之间的转换表(替换密码),如果无法转换,则输出false。必须最小化并从左到右创建答案。单词之间要翻译的第一个字符必须是翻译表中的第一个字符。除此之外,任何未翻译的字母(与原始位置相同)都不应出现在翻译表中。
通过示例可能最容易定义:
有效案例
"bat", "sap" => ["bt","sp"]
请注意顺序,["tb","ps"]
此挑战的输出无效。
"sense", "12n12" => ["se","12"]
请注意,n
由于它是一对一的关系,因此不翻译。
"rabid", "snail" => ["rabd","snal"]
请注意,i
由于它是一对一的关系,因此不翻译。
"ass", "all" => ["s","l"]
不包括A,它保持不变,由于模式匹配而s
可以映射到l
。
"3121212", "ABLBLBL" => ["312","ABL"]
完美匹配图案。
虚假案件
"banana", "angular" => false
(长度不一样,不可能)。
"animal", "snails" => false
(每个字符只能在翻译的每一侧一次使用)。
"can","cnn" => false
(n在翻译中隐式使用,因此,使用n-> a定义翻译表将无效)
因此,这[aimal,sails]
是一个无效的答案,这很虚假。
"a1", "22" => false
参见“腔室”,列为虚假的。在这种情况下,是因为a
和1
都不能同时映射到2
。(每个字符只能在翻译的每一侧一次使用)。
这个答案似乎是一个很好的基准:https : //codegolf.stackexchange.com/a/116807/59376
如果您对两个未列出的单词对的功能有疑问,请遵循此实现。
I / O规则
- 输入可以是2元素数组或2个单独的输入。
- 输出可以是数组或换行符/空格分隔,类似于我显示的方式。
- 错误输出可能是0,-1或false。错误/空输出也可以。
- 您将保证这
a
将不相等b
,a
也不b
为空。 a
并且b
是仅可打印ASCII的字母序列。
注意事项
- 翻译必须从左到右进行,请参见示例1。
- 您不得输出保持相同的字符。
- 您的程序只能包含两个字符串
a
和b
。 - 每个字符只能在翻译的每一面一次使用。这就是使翻译从不可能
snails
变为animals
不可能的原因。 - 不应进行递归替换。递归替换的示例:
"a1","22"->[a1,12]
首先将a替换为1,然后将两个结果1都替换为2。这是不正确的,假设所有翻译都是彼此独立发生的,这是虚假的。含义:转换表为[a1,12]的“ a1”计算为12(而不是22)