字典树leetcode习题

本文通过三道LeetCode题目介绍如何利用字典树(Trie)解决算法问题,包括查找词典中最长的单词、驼峰式匹配和找出前K个高频单词。通过对字典树的构建和遍历,实现高效的字符串匹配和频率统计。
摘要由CSDN通过智能技术生成

720. 词典中最长的单词

给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。
若无答案,则返回空字符串。
实例

输入: 
words = ["w","wo","wor","worl", "world"]
输出: "world"
解释: 
单词"world"可由"w", "wo", "wor", 和 "worl"添加一个字母组成。

思路:
插入每一个word,构成一棵树,查找算法时,判断是否为该模式中最长的,如果不是,继续寻找。
对比查找每个模式中最长的词,找到结果。

#include<cstring>
class Solution {
   
public:
    struct TrieNode{
   
        bool end;
        TrieNode* child[26];
        TrieNode():end(false){
   
            for(int i = 0; i < 26; i++) child[i] = NULL;
            
        }

    };
    void insert(string word){
   
        if(word == "")return;
        TrieNode * node = root;
        int index = 0;
        for(int i = 0; i<word.size();i++){
   

            index = word[i]-'a';
            if(node->child[index]==NULL)node->child[index]=new TrieNode();
            node = node->child[index];
        }
        node->end = true;
    }
    bool search(string word){
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值