c# Leetcode720-典中最长的单词(hashset)

本文介绍了一种改进的算法,用于从字典中找出最长的单词,通过使用哈希集合和排序技巧,确保找到的单词是字典中存在的完整单词。此方法在保持效率的同时,避免了不必要的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下这种方法能成功,却击败了0.00%,后期我会对写出新的方法

    public string LongestWord(string[] words) {
         var wordsSet = new HashSet<string>();
        var resultSet = new HashSet<string>();
        Array.Sort(words);
        for(var i = 0; i < words.Length; i++) {
            wordsSet.Add(words[i]);
        }
        for(var i = words.Length - 1; i >= 0; i--) {
            if(IsCompleteWord(words[i], wordsSet)) {
                resultSet.Add(words[i]);
            }
        }
        var list = resultSet.OrderByDescending(r => r.Length).ToList();
        return list.Where(r => r.Length == list[0].Length).Min();

 
    }
    private static bool IsCompleteWord(string word, HashSet<string> wordsSet) {
        for(var i = 0; i < word.Length; i++) {
            if(!wordsSet.Contains(word.Substring(0, i + 1))) return false;
        }
        return true;
    } 

新的思路:

后期更新...

 

 

2019/12/04

还是用哈希

思路:排序、 如果是一个的话加如hashset先将w加入

wo,判断wo是否包含  wo-1  =w.如果包含w。将wo加入其中,三想表达式求出最大的字符串就ok了

        public static string LongestWord(string[] words)
        {
            if (words == null)
                return null;

            Array.Sort(words);

            // word with prefixes in the dictionary
            var visitedPrefix = new HashSet<string>();

            string maximumWord = "";

            foreach (var word in words)
            {
                var length = word.Length;

                // think carefully about this reason using w, wo, wor, word
                string str = word.Substring(0, length - 1);
                if (length == 1 || visitedPrefix.Contains(str))
                {
                    // keep lexico order - apple will be checked before apply
                    maximumWord = word.Length > maximumWord.Length ? word : maximumWord;
                    visitedPrefix.Add(word);
                }
            }

            return maximumWord;
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值