720. 词典中最长的单词(其他)

题目描述:

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

若无答案,则返回空字符串。

算法思路:

  • 首先需要对words中的元素进行排序
  • 设置一个存储结果的变量res,利用set实现保存,去重和排序
  • 遍历words中的每一个元素,当满足单词长度为1,或者截取的length-1长度的单词可以在set中找到,我们就将遍历到的这个单词插入到set中,更新res的结果,更新为长度更长的单词。
  • 最后返回res即可。
class Solution {
public:
    string longestWord(vector<string>& words) {
        sort(words.begin(),words.end());//排序
        string res = "";//保存结果
        set<string> st;//set保存,去重,排序
        for(auto it:words){//words遍历每个元素
        //如果it的长度为1,插入到set中,又或者从it中截取it.length-1长度的单词,可以在set中找
//到,则将it 插入到set中。长度为1,代表开头,进行逐个单词的查看。count函数此时的作用是在set中查看是否存在某元素。
            if(it.length() == 1 || st.count(it.substr(0,it.length()-1) ) == 1){
                st.insert(it);
                if(it.length() > res.length()){//返回长度更长的结果。
                    res = it;
                }
            }
        }
        return res;
    }
};

 st.count(it.substr(0,it.length()-1) ) == 1

count()函数返回set中含有元素的个数,由于是set有自动去重的作用,因此也只能返回0或者1,因此可以判断是否有元素的存在。substr()函数截取0到length-1长度的单词在set中查找。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值