“Programming Challenges (The Programming Contest Training Manual)”可能是最好的算法练习书之一。我已经解决了前 11 个练习,但现在我遇到了“Crypt Kicker”问题:
Crypt Kicker
加密文本的一种常见但不安全的方法是置换字母表中的字母。换句话说,字母表中的每个字母在文本中始终被其他字母替换。为确保加密是可逆的,没有两个字母被同一个字母替换。你的任务是解密几行编码的文本,假设每一行使用一组不同的替换,并且解密文本中的所有单词都来自已知单词的字典。
输入
输入由包含整数 n 的行组成,后跟 n 个小写单词,每行一个,按字母顺序排列。这 n 个单词组成了可能出现在解密文本中的单词字典。
字典后面是几行输入。如上所述,每一行都被加密。字典中的单词不超过 1,000 个。没有单词超过 16 个字母。加密行仅包含小写字母和空格,长度不超过 80 个字符。
输出
解密每一行并将其打印到标准输出。如果有多种解决方案,任何一种都可以。
如果没有解决方案,请将字母表中的每个字母替换为星号。示例输入6
和
dick
jane
puff
spot
yertlebjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn
xxxx yyy zzzz www yyyy aaa bbbb ccc dddddd样本输出
dick and jane and puff and spot and yertle ...
我应该采取什么策略来解决这个问题?我正在考虑一个经典而残酷的回溯解决方案,但我试图避免这种情况,直到我找到更智能的东西。
PS:这与作业无关,我只是想提高我的整体技能。