您的位置:首页 > 其它

给定一个字符串列表,找出单词中最长单词,可以用l列表中的其他单词一次构建一个字符。返回具有最小字典顺序的最长单词。

2017-11-13 12:01 483 查看
本题源自leetcode

---------------------------------------------------------------------------------------

思路:

 1 先对字符串列表的单词排序。

2 然后遍历每一个字符串,用有序表set存储。如果这个单词的前缀在set中出现过或者单词长度为1,就插入到set

3 选出最长的字串

代码:

string longestWord(vector<string>& words) {
string res="";
sort(words.begin(),words.end());
unordered_set<string> s;
for(string word:words){
if(word.size()==1||s.count(word.substr(0,word.size()-1))){
res=res.size()<word.size()?word:res;
s.insert(word);
}
}
return res;
}

代码2:


  struct strComp{

        bool operator()(auto &l1,auto &l2)const{

            if(l1.size()>l2.size())

                return true;

            else if(l1.size()==l2.size())

                return l1<l2;

            

            return false;

        }

    };

    

    string longestWord(vector<string>& words) {

        string res="";

        if(words.size()==0)

            return res;

        set<string,strComp> s(words.begin(),words.end());

        

        for(auto& word : s){

            int i=1;

            for(;i<word.size();i++){

                string str=word.substr(0,i);

                if(s.find(str)==s.end())

                    break;

            }

            if(i==word.size())

                return word;

        }

        return res;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐