如何使用彼此相邻的字谜对字符串数组进行排序?
例如:
输入{god,dog,abc,cab,man}
输出{abc,cab,dog,god,man}
我的方法:在O(nlogn)中对数组进行排序(不考虑anagrams情况).接下来,拾取第一个字符串并为字符串创建直方图,并将直方图与数组中剩余的字符串直方图进行比较,并将匹配的字符串放在数组的适当位置..重复,直到达到数组大小.此算法采用O(n ^ 3)的最坏情况(如果我们假设在最坏的情况下,每个字符串也是大小为n)和直方图表示的额外空间
直方图方法取自参考: 发现两个单词是否是彼此的字谜
我们能做得比这更好吗?
tao*_*ocp 11
你当然可以做得更好,如下:
map<string, set<string> >用来为此目的服务.假设字符串的长度为M,并且数组的大小为N,则时间复杂度为:O(NMlogM),M通常平均小于N. 所以这比你说的要高效得多.