创建词典树的复杂性是什么?
答案 0 :(得分:2)
答案 1 :(得分:1)
适当的数据结构可能是一个排序列表。在这种情况下,这将成为二分搜索问题,因此O(log n)。
答案 2 :(得分:0)
正如Gabe上面提到的,Trie是一个很好的解决方案,但对于拥有大量单词的词典来说,实现起来有点困难。如果O(n log n)算法适合您,您可以使用二进制搜索解决此问题。这是用C编写的代码:
char dict[n][m]; // where n is number of words in dictionary and // m is maximum possible length of word char word[m]; // it's your word int l = -1, r = n; while(l+1 < r) { int k = (l+r)/2; if(strcmp(dict[k], word) < 0) l = k; else r = k; } int len = strlen(word); l++; // first word's index with greater or equal prefix then word is l+1 bool matches = (strlen(word[l]) >= len); for(int i = 0; i < len && matches; i++) { if(word[i] != dict[l][i]) { matches = 0; } } if(matches) { printf("given word is prefix of %dth word.", l); } else { printf("given word isn't in dictinary."); }
答案 3 :(得分:-2)
只需使用一个简单的循环运行,并检查每个单词是否以任何内容开头。
在几乎所有语言中都有一个内置函数,用于检查一个字符串是否以另一个字符串开头。
复杂度为O(log n),而n是字典中单词的数量。