【发布时间】:2015-06-09 19:24:08
【问题描述】:
给你一个字符串,根据那里的频率找到所有子字符串排序(降序)的频率。
例如:ababa {“a”、“b”、“a”、“b”、“a”、“ab”、“ba”、“ab”、“ba”、“aba”、“bab”、“aba”、“ abab", "baba", "ababa"}.
输出:
3,2,2,2,2,1,1,1,1
解释
3 一个 2 乙 2巴 2阿巴 2抗体 1 个 1个爸爸 1 贝巴 1个宝宝
解决方案
1)一个明显的解决方案是将所有字符串保存在哈希映射中并对其进行计数 频率,但需要 o(n^3logn) O(n^2 *n){n^2 个子串 *O(n) 用于比较字符串 *logn(因为地图维护为红黑树)} 2)在三叉搜索树中插入所有子串,然后检索每个子串的频率,然后对频率进行排序 O(n^3 logn)
我想知道是否存在 O(n^2) 或 O(nlogn) 解决方案。
喜欢这个http://www.quora.com/Given-a-string-how-do-I-find-the-number-of-distinct-substrings-of-the-string
【问题讨论】:
标签: java string algorithm suffix-tree suffix-array