题目
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。
如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。
思路:
1,看dictionary 是否是s的子串,如果是才会有未来
2,根据长度和字典序
引申:看一个A字符串是否是B字符串的子串(字符串A可以通过删除B 中的某些字符得到)isSubstr
class Solution {
public:
string findLongestWord(string s, vector<string>& dictionary) {
// 看dictionary是不是s的子串,如果是,看长度和字典序
string ret;
for (int i = 0; i < dictionary.size(); i++) {
if (isSubstr(dictionary[i], s)) {
int dirSize = dictionary[i].size();
if ((dirSize > ret.size()) || ((dirSize == ret.size()) && (dictionary[i] < ret))) {
ret = dictionary[i];
}
}
}
return ret;
}
bool isSubstr(string dirStr, string str)
{
int cnt = 0; // 使用cnt的好处就是变量功能单一,当然这里也完全可以使用i
for (int i = 0, j = 0; i < dirStr.size() && j < str.size(); j++) {
if (dirStr[i] == str[j]) {
i++;
cnt++;
}
}
return (cnt == dirStr.size());
}
};