题目分析:就是要找到dictionary中长度最长的s的字串。如果长度相等时按照字典序选择。
总体思路:先对dictionary按照长度倒序排列,相同时按照字典序排列。需要使用到sort自定义排序规则。之后使用两个指针分别指向s和dictionary中每个元素的开头,一个个遍历,第一个匹配成功的即返回。
class Solution {
public:
string findLongestWord(string s, vector<string>& dictionary) {
sort(dictionary.begin(), dictionary.end(), cmp);
int sLength = s.length();
for (auto& sub : dictionary) {
int subLength = sub.length();
if (sLength < subLength) continue;
int i = 0, j = 0;
while (i < sLength && j < subLength) {
if (s[i] == sub[j]) j++;
i++;
}
if (j == subLength) return sub;
}
return "";
}
static bool cmp(string &a, string &b) {
if (a.length() == b.length()) return a < b;
return a.length() > b.length();
}
};