给出一个字符串数组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;
}
};