你得到一个字符串,根据那里的频率找到所有排序(降序)的子字符串的频率。
例如: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 a 2 b 2 ba 2 aba 2 ab 1 abab 1 baba 1 ababa 1 bab
解决方案
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