思路:根据题意有两个问题待解决
1、s字符串中是否可以通过删减得到该英语词语
2、如何找到长度最长且字母序最小的字符串
针对第二个问题可以对词典dictionary进行预处理:根据长度降序和字母序升序来排序
针对第一个问题可以初始化两个指针i,j分别指向s和英文单词的首位字母开始遍历,若字母相同,则两个指针i,j同时自加,若不同则i自加,寻找s中与英文单词对应位置字母相同的字母;最后当j的大小等于单词长度则说明s可以通过删减得到这个单词,并将其返回
Java实现:
class Solution {
public String findLongestWord(String s, List<String> dictionary) {
Collections.sort(dictionary,new Comparator<String>(){
public int compare(String word1,String word2){
if(word1.length() != word2.length()){
//word1 > word2 返回负整数
//word1 < word2 返回正整数
return word2.length() - word1.length();
}else {
//word1 > word2 返回正整数
//word1 < word2 返回负整数
return word1.compareTo(word2);
}
}
});
for(String t : dictionary){
int i = 0,j = 0;//i指向s,j指向t
while(i < s.length() && j < t.length()){
if(s.charAt(i) == t.charAt(j)){
i++;
j++;
}else {
i++;
}
}
if(j == t.length()){
return t;
}
}
return "";
}
}
Java给字符串排序那块我看的别人的代码,不是特别理解,希望能有大佬来讲解一下,感谢观看,也欢迎订阅我的力扣随笔,会持续分享解题思路