如何在C中的Trie中获取最长前缀的长度

时间:2018-10-18 17:12:18

标签: c pseudocode prefix trie

我正在尝试找出如何在Trie中找到两个单词的最长前缀的长度。我试图找到一种解决方案,但什么也没发现。

我已经有了Trie的实现,其中节点由结构表示:

struct node
{
    int end;    // 1 if node is end of word or 0 if not
    int count;  // The number of words that contain current node
    struct node *letter[26]; // Array of nodes, which represent the alphabet
};

int length_of_longest_prefix(struct node *root)
{
   //??????????
}

我试图为这个问题做一个递归函数,但是我做不到。

让我们考虑一下这个充满希望的故事: Filled trie

解决此问题的最佳方法是什么? 伪代码将非常有用。

我的功能:

//Global variable
  int total_max;

//root = start
int length_of_longest_prefix(struct node *root, struct node *start)
{
    int max = 0;
    int depth = 0;

    for (int i = 0; i < 26; i++)
    {
        if(root->letter[i] != NULL && root->letter[i]->count >= 2)
        {
            depth = length_of_longest_prefix(root->letter[i], start);
            depth++;

            if(root->letter[i] == start->letter[i])
            {
                depth = 0;
            }
        }

        if(depth > total_max)
            total_max = depth;
    }
        return depth;
}

    int main(void)
    {
     total_max = 0;
     struct node *root = (struct node*)malloc(sizeof(struct node));

     for (int i = 0; i < 26; i++)
     {
        root->letter[i] = NULL;
     }

     root->end = 0;
     root->count = 0;

    /*Inserting strings to Trie*/

     length_of_longest_prefix(root, root);
     printf("%d\n", total_max);

     return 0;
    }

0 个答案:

没有答案