720 leetcode 词典中最长的单词

题目描述:
在这里插入图片描述

思路:
1、使用哈希表记录每个单词出现的次数;
2、单词长度从小到大排序,使得最长的单词在最后面;
3、然后从后面的开始判断,当后面的单词符合要求(它少一个末尾的单词都能在数组中出现),比前一个长度短的单词符合要求时,则出去这个单词,剩下的单词符合要求,放在vector中;
4、再把符合要求的单词,找出词典顺序在前面的单词;

代码如下:

class Solution {
public:
    string longestWord(vector<string>& words) {
        map<string,int> cnt;
        vector<string>res;
        for(int i=0;i<words.size();i++){
            cnt[words[i]]++;
        }
        for(int i=0;i<words.size();i++){
            for(int j=i+1;j<words.size();j++){
                if(words[i].size()>words[j].size()){
                    string c=words[i];
                    words[i]=words[j];
                    words[j]=c;
                }
            }
        }
        for(int i=words.size()-1;i>=0;i--){
            int flag1=1;
            int flag2=1;
            string str=words[i];
            for(int j=0;j<words[i].size()-1;j++){
                str.pop_back();
                if(cnt[str]==0){
                flag1=0;
                break;
                }
            }
            if(flag1!=0){
                res.push_back(words[i]);
                if(words[i].size()<res[0].size()){
                res.pop_back();
                flag2=0;
                }
            }
            if(flag2==0)
            break;
        }
        if(res.size()==1)
        return res[0];
        else{
            string result;
            result=res[0];
            for(int i=1;i<res.size();i++){
                int m=0;
                while(1){
                    if(result[m]<res[i][m])
                    break;
                    if(result[m]>res[i][m]){
                    result=res[i];
                    break;}
                    if(result[m]==res[i][m])
                    m++;
                }
            }
            return result;
        }
    }
};
发布了123 篇原创文章 · 获赞 0 · 访问量 961

猜你喜欢

转载自blog.csdn.net/peachzy/article/details/104301873
720