我的朋友给我一个问题,他说这很简单,但是我想不出一个好的算法来实现。
系统会为您提供100个随机英语单词的输入。您必须找到最长的字符串,其中一个单词的最后一个字母与下一个单词的第一个字母匹配。每个单词只能使用一次。
例如,如果给您单词“ cat”,“ dog”,“ that”,则您可以输入的最长字符串将是“ cat-> that”。如果给您单词“ mouse”,“ moose”,“ unicorn”,则您可以输入的最长字符串将仅为一个单词(因为这些单词均未链接)。如果给您单词“ bird”,“ dish”,“ harb”,则最长的字符串可能是“ harb-> bird-> dish”(或“ dish-> harb-> bird”或“ bird- >菜-> harb”)。
我想到了将其建模为有向循环图的想法。每个节点只是一个单词,每个单词/节点的顶点都以该单词结尾的字母开头。
+-------+ \ +------+
| cat |-----------| that |
+-------+ / +------+
| |
\|/ |
+-------+ / |
| the |--------------+
+-------+ \
这个问题似乎是最长路径搜索,即NP-Hard。
有更好的方法吗?甚至可以使用某种近似算法?还是采用某种方法来利用英语来减少搜索空间?