class Solution {
public:
string findLongestWord(string s, vector<string>& dictionary) {
sort(dictionary.begin(),dictionary.end(),[&](string &a,string &b){
if(a.size()==b.size())return a<b; //长度相等,按字符字典的升序排列
return a.size()>b.size();//按长度降序排列
});
for(string &t:dictionary){
if(issub(s,t)) return t;
}
return "";
}
bool issub(string s,string t){//判断t是否是s的子序列
int n=s.size(),m=t.size();
if(m>n) return false;//t长度大于s,一定不是子序列
int i=0;//记录当前s中匹配到了哪个位置
for(char ch:t){
while(i<n&&s[i]!=ch)i++;
if(i>=n) return false;
i++;
}
return true;
}
};