给出一个没有重复字母的字符串,怎样返回一个由同样的字母组成、按单词排序的字符串
品锅,楚阳做的没有问题,其实也不需要词库。这题比较隐晦的其实有两点: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. 这些词之间不能有字符重复。这样就行了。当然要考虑不止有一个解。这个方法的缺点在于第一步遍历很暴力。没想出来怎么从字符串出发该怎么做。肯定有更好的办法。
推荐阅读
- 家中千万不要摆这些绿植,对身体不仅没有帮助,还会起反作用
- 同比■同比增长7.1%!2021年的第一个节你花了多少钱?
- “他是我第一个会说普通话的老师”:一对师生折射青海山村蝶变
- 有必要重新开个C店吗
- 耻骨|韧带痛、耻骨也痛,从来没有这么痛过,痛了两个多星期了!”厦门孕妈崩溃:“孕晚期各种不舒服
- 大学再有三个月就结束了,没学到知识,参加一个软件测试培训机构好吗
- 汽车|长安UNI-K又将开创一个新的"引力"纪元?
- 神话|武汉传奇父亲:一个平行班孩子创造的高考神话(感动上万家长)
- 王者荣耀李白能不能出肉
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。