本题源自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;
}