"Programming Challenges (The Programming Contest Training Manual)" 可能是关于算法最好的练习书之一。 我已经解决了前11个问题,但现在卡在了 "Crypt Kicker" 问题上:
Crypt Kicker
加密文本的一种常见但不安全的方法是对字母表中的字母进行置换。 换句话说,文本中的每个字母都被某个其他字母替换。 为确保加密是可逆的,不能将两个字母替换为同一个字母。您的任务是解密多个编码行的文本,假设每行使用不同的替换集,并且所有解密后文本中的单词来自已知单词的字典。
输入
输入由包含整数n的一行组成,后跟按字母顺序排列的n个小写单词,每个单词占一行。这n个单词组成可能出现在解密文本中的单词字典。
字典之后是几行输入。 每行均按上述方式加密。字典中不超过1000个单词。没有单词超过16个字母。加密的行仅包含小写字母和空格,长度不超过80个字符。
输出
解密每行并将其打印到标准输出。 如果有多个解决方案,则任何一个都可以。
如果没有解决方案,请用星号替换字母表中的每个字母。示例输入 6
and
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:这不是作业相关,我只是想提高我的技能水平。