版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86483019
day19, 通过删除字母匹配到字典里最长单词
题目来源:leetcode
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。
示例 1:
输入:
s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”]
输出:
“apple”
示例 2:
输入:
s = “abpcplea”, d = [“a”,“b”,“c”]
输出:
“a”
解答:这道题关键在于排序。首先明确排序的规则,首先是按照字符串从大到小排序,当字符串大小相等时候,按照字典序排列。
排序好之后,从头开始遍历,对于每一个字符串d[i],分别与s进行匹配即可。
代码:
string findLongestWord(string s, vector<string>& d) {
sort(d.begin(), d.end(), [](string &a, string &b){
if( a.size() != b.size())
return a.size() > b.size();
else
return a < b;
});
for( int i = 0; i<d.size(); i++){
int j = 0, k = 0;
while( k < s.size()){
if( s[k] == d[i][j])
k++, j++;
else
k++;
}
if( j == d[i].size())
return d[i];
}
return "";
}
运行结果: