Мне нужно напечатать все уникальные подстроки.Поэтому я создаю trie
, но не могу понять, как я могу распечатать все подстроки.Например, если введено значение aab
и aac
, то я ожидаю, что оно напечатает "a", "aa", "aab", "aac", "ab", "ac", "b", "c"
.
Что по сути мне нужно, чтобы найти способ получить уникальные подстроки из набора строк.Я думаю, trie
- это хороший способ, поскольку для создания trie
потребуется O(n)
. Ниже приведен мой код для построения дерева.
#include <string>
#include <iostream>
#include <vector>
struct trie_node {
trie_node *(next[26]);
trie_node() {
for ( int i = 0; i < 26; ++i) {
next[i] = (trie_node*)0;
}
}
};
trie_node *root;
char cur_substring[2000];
void build_trie(std::string& input) {
trie_node *ptrie = root;
for ( std::string::iterator it = input.begin(); it != input.end(); ++it) {
int i = *it - 'a';
if (ptrie->next[i] == (trie_node*)0)
ptrie->next[i] = new trie_node;
ptrie = ptrie->next[i];
}
}
void print_sub_strings(trie_node *p_trie, int pos) {
for (int i = 0; i < 26; i++) {
if (p_trie->next[i] != (trie_node*)0) {
cur_substring[pos] = i + 'a';
print_sub_strings(p_trie->next[i], pos + 1 );
}
}
}
ОБНОВЛЕНИЕ 1
На основании полученных данных я переписал свой код, но, похоже, он также не работает.*
Вывод
a
aa
aab
aabc
aab
aabc
ab
abc
Press any key to continue . . .