每日力扣-哈希-词典中最长的单词

104 阅读1分钟

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

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

输入: words = ["w","wo","wor","worl", "world"] 输出:"world" 解释: 单词"world"可由"w", "wo", "wor", 和 "worl"添加一个字母组成。

解题思路:难点1:比较字典序。难点2:单词必须是一个个字母加上去的。 用isbigger函数比较两个字符串谁字典序大,用test函数判断该字符串减去最后一个字符是否还在字典里,直到剪完

class Solution {
public:
    string longestWord(vector<string>& words) {
        int max = 0;
        string str = "";
        for(int i = 0 ; i < words.size() ; i++)
        {
            int len = words[i].size();
            if(len > max || (len == max && isbigger(words[i],str)))
            {
                string s = words[i];
                if(test(words,s))
                {
                    str = words[i];
                    max = len;
                }
            }
        }
        return str;
    }
    bool test(vector<string>& words,string& s)
    {
        for(int i = 0 ; i < words.size() ; i++)
        {
            if(words[i] == s)
            {
                if(s.size() == 1) return true;
                string str = s.substr(0,s.size() - 1);
                return test(words,str);
            }
        }
        return false;
    }
    bool isbigger(string& s1,string& s2)
    {
        for(int i = 0 ; i < min(s1.size(),s2.size()) ; i++)
        {
            if(s1[i] > s2[i]) return false;
            else if(s1[i] < s2[i]) return true;
        }
        return s1.size() < s2.size() ? true : false;
    }
};