

思路:
因为要找长度最长且字母序最小的字符串。
因此先对dictionary进行排序,按字符串长度降序,假如长度相同就按字母序,即默认的string排序即可。
接下来遍历dictionary每一个string元素,记为dic,看是否满足要求。
辅助函数,判断dic是否是s的子串:
假如dic长度大于s,那么必然不可能由s删除字符得到dic,返回false;
否则就用双指针的方法,判断即可,具体流程见代码。
class Solution {
public:
bool help(const string& s1,const string& s2)
{
if(s2.size()>s1.size()) return false; //s2不能比s1长
int i=0,j=0;
for(;i<s1.size();++i)
{
if(s1[i]==s2[j])
{
++j;
if(j==s2.size()) return true;
}
}
return false;
}
string findLongestWord(string s, vector<string>& dictionary) {
sort(dictionary.begin(),dictionary.end(),[](const string& a,const string& b)
{
return a.size()>b.size()||(a.size()==b.size()&&a<b);
});
for(auto &dic:dictionary)
{
if(help(s,dic)) return dic;
}
return string();
}
};
本文探讨了一种寻找给定字符串s中,字典dictionary中最长且字母序最小的子串的算法。首先对字典进行排序,根据长度和字母序,然后使用双指针方法检查每个字符串是否为s的子串。当找到符合条件的子串时,即为答案。此方法在解决字符串处理问题时展现出高效和简洁的特点。
314

被折叠的 条评论
为什么被折叠?



