524. 通过删除字母匹配到字典里最长单词 难度[中等]
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。
如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。
示例 1:
输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"]
输出:"apple"
示例 2:
输入:s = "abpcplea", dictionary = ["a","b","c"]
输出:"a"
提示:
- 1 <= s.length <= 1000
- 1 <= dictionary.length <= 1000
- 1 <= dictionary[i].length <= 1000
- s 和 dictionary[i] 仅由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:排序+贪心+双指针
先自定义比较器排序,按照长度排序,如果长度一样则按字典序排序
之后再遍历dictionary ,通过双指针+贪心的方法求是否是 s的子串,是就返回
class Solution {
public String findLongestWord(String s, List<String> dictionary) {
Collections.sort(dictionary,(a,b)->{
if(a.length()!=b.length()) return b.length()-a.length();
return a.compareTo(b);
});
int m = s.length();
for(String ss:dictionary){
int n = ss.length();
int i=0,j=0;
while (i<m && j<n){
if(ss.charAt(j)==s.charAt(i)) {
i++;
j++;
}else {
i++;
}
}
if(j==n){
return ss;
}
}
return "";
}
}
此文章创于本人学习时的记录,如有错误或更优解还请指出