zoukankan      html  css  js  c++  java
  • 91词典中最长的单词(720)

    作者: Turbo时间限制: 1S章节: 其它

    晚于: 2020-09-09 12:00:00后提交分数乘系数50%

    问题描述 :

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

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

    示例 1:

    输入:

    words = ["w","wo","wor","worl", "world"]

    输出:"world"

    解释: 

    单词"world"可由"w", "wo", "wor", 和 "worl"添加一个字母组成。第一个单词是"w",该单词只有一个字母。我们需要从一个字母的单词开始,每步添加一个字母。

    示例 2:

    输入:

    words = ["a", "banana", "app", "appl", "ap", "apply", "apple"]

    输出:"apple"

    解释:

    "apply"和"apple"都能由词典中的单词组成。但是"apple"的字典序小于"apply"。

    输入说明 :

    首先输入words数组的长度n,范围为[1,1000]。

    然后输入n个字符串,每个字符串长度范围为[1,30]。

    所有输入的字符串都只包含小写字母。

    输出说明 :

    输出答案,不包含空格。

    如果没有答案,则输出一个空格。

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <string>
    #include <vector>
    #include <unordered_set>
    using namespace std;
    
    class Solution {
    public:
        string longestWord(vector<string>& words) 
        {
            unordered_set<string> S;
            for(string word:words )
                S.insert(word);
            string res="";
            for(string word:words)
            {
                if(word.size()>res.size()||(word.size()==res.size()&&word.compare(res)<0))
                {
                    bool flag=true;
                    for(int i=1;i<word.size();i++)
                    {
                        string temp=word.substr(0,i);
                        if(S.count(temp))
                            continue;
                        else
                        {
                            flag=false;
                            break;
                        }
                    }
                    if(flag)
                        res=word;
                }
                
            }
            return res;
        }
    };
    int main()
    {
        string str;
        vector<string> words;
        int n;
        cin>>n;
    
        for(int i=0; i<n; i++)
        {
            cin>>str;
            words.push_back(str);
        }
        string res=Solution().longestWord(words);
        cout<<res;
        return 0;
    }
    
    
    
    /*
    class Solution {
    public:
        string longestWord(vector<string>& words) 
        {
            unordered_set<string> set1;   //不需要排序,所以用unordered_map效率更高
            for(string word : words)
            {
                set1.insert(word);         //将words中的每个元素插入set集合
            }
            string res = "";
          //  int count = 0;
            for(string word : words){
                if(word.size() > res.size() || (word.size() == res.size() && word.compare(res) < 0))
                { //只考虑比当前res长 或者和res一样长且字典序比res小的string元素
                    bool flag = true;
                    for(int i = 1; i < word.size(); ++i)
                    {
                        string tmp = word.substr(0, i);   //取前缀,前缀长度累增
                        if(set1.count(tmp))   //如果前缀在set集合中,那么就继续
                        continue;
                        else
                        {                   //前缀不在,说明不符合要求,立即跳出
                            flag = false;
                            break;
                        }
                    }
                    if(flag)
                    res = word;
                }
            }
            return res;
        }
    };
    */
  • 相关阅读:
    java-集合框架-泛型2-泛型限定
    进程间通信
    多进程编程基础概念
    linux deb 打包流程
    linux RPM 打包流程
    Python 第一個程序
    从注册验证码入手,我保住了30%的流失用户
    为什么Web端登录需要验证码?
    网络验证码的进化:从简单图文到无感验证
    公开课 | 金融知识图谱的应用探索
  • 原文地址:https://www.cnblogs.com/zmmm/p/13654921.html
Copyright © 2011-2022 走看看