【发布时间】:2012-01-09 07:51:46
【问题描述】:
我需要获取一个字符串的所有唯一子字符串。我已将字符串存储到 trie 中,但我无法弄清楚如何使用它来打印所有唯一的子字符串
例如
字符串aab所有唯一的子字符串都是{"a", "aa", "aab", "ab", "b"}
这是我的trie 代码
#include <iostream>
#include <map>
#include <string>
#include <stack>
struct trie_node_t {
typedef std::map<char, trie_node_t *> child_node_t;
child_node_t m_childMap;
trie_node_t() :m_childMap(std::map<char, trie_node_t*>()) {}
void insert( std::string& word ) {
trie_node_t *pNode = this;
for ( std::string::const_iterator itr = word.begin(); itr != word.end(); ++itr) {
char letter = *itr;
if ( pNode->m_childMap.find(letter) == pNode->m_childMap.end()){
pNode->m_childMap[letter] = new trie_node_t();
}
pNode = pNode->m_childMap[letter];
}
}
void print() {
}
};
int main ( int argc, char **argv ) {
trie_node_t trie;
trie.insert(std::string("aab"));
trie.print();
}
我如何实现print 函数,它将打印所有唯一的子字符串。
我在找Linear time approach
既然我已经建立了一个trie,有没有什么方法可以迭代,每当我访问任何节点时,我都可以将它打印为一个唯一的字符串。
【问题讨论】:
-
您的代码中存在内存泄漏。在 this 的情况下可能无关紧要,但 ...
-
严格来说,空字符串也被认为是所有字符串的子字符串。
-
@BlueRaja-DannyPflughoeft:但话又说回来,他需要打印它,每个程序都会打印空字符串:)
-
可能重复:stackoverflow.com/questions/2560262。后缀树是最适合表示所有唯一子串的结构。即使可能存在 Theta(n^2) 唯一的子字符串,您也可以在线性时间内构建它。
标签: c++ algorithm data-structures