给出一个没有重复字母的字符串,怎样返回一个由同样的字母组成、按单词排序的字符串

品锅,楚阳做的没有问题,其实也不需要词库。这题比较隐晦的其实有两点:1. 每个char在word里面只出现一次,所以我们间接知道了这个string长度就是8。2. 有没有发现我们test case的大数组里面刚好有7个小数组("tup"之类的)?现在只需要证明:对于n个character的string,只需要n-1个排序,就可以充分推出这个string了。其实这是个图(graph)问题。比如下面这图(图是网上随便找的,有点丑),代表的word是hello,我们只需要从h出发,能找到一条经过所有char的路径就好了。很明显我们有5个char,所以中间的link有4个。我们需要四个小数组,比如("hel" "llo" 之类的),每个两数组都会让我们之多增加两条link,而四个不重复的小数组一定会给我们4个link,从h能走到o。所以不用知道hello是不是一个meaningful的word,因为给的test case只能解译出一个结果(充分性)。要是最后出来的不是meaningful的word,怪testcase,不怪算法~给出一个没有重复字母的字符串,怎样返回一个由同样的字母组成、按单词排序的字符串
【给出一个没有重复字母的字符串,怎样返回一个由同样的字母组成、按单词排序的字符串】
————————————————————————————抛开原题,只看这个问题的话。那就得一定得要一个词库,至少是一种验证我们得到的词是meaningful的办法。这样这个题就变成,给一个没有重复字符的字符串,找到里面包含的词,而且这些词刚好把这个字符串分完,且字符不重复。我的第一反应是动态规划,但是这个问题是乱序的字符串,所以想用普通的动态规划就不现实了。比如看这里Dynamic Programming不过也有办法,假设我们的输入字符串都比较小,我们最后能到的词也就那么多。把词库(英文词汇有十几万,而且还在扩展。。。)遍历一遍,把组成字符都在这个字符串的词找出来(如果长度超过输入字符串的直接Pass,提高效率),放在一个矩阵里面。然后用深度优先算法,搜索停止的条件是:1. 路径上所有词组合在一起之后字符总长度是输入字符串的长度。2. 这些词之间不能有字符重复。这样就行了。当然要考虑不止有一个解。这个方法的缺点在于第一步遍历很暴力。没想出来怎么从字符串出发该怎么做。肯定有更好的办法。


    推荐阅读