524. 通过删除字母匹配到字典里最长单词
【题目】:
【代码】:
class Solution {
public String findLongestWord(String s, List<String> d) {
String res="";
Collections.sort(d);
for(String w: d){
if(isSubString(s, w)){
if(w.length() > res.length()){
res=w;
}
//else if(w.length() == maxLen && w.compareTo(res)<0){
// res=w;
//}
}
}
return res;
}
public boolean isSubString(String s, String word){
int len_s=s.length();
int len_w=word.length();
if(len_s<len_w){
return false;
}
int i=0,j=0;
while(i<len_s && j<len_w){
if(s.charAt(i)!=word.charAt(j)){
i++;
}else{
i++;
j++;
}
}
if(j==len_w){
return true;
}
return false;
}
}
效果:isSubString(String s, String word)函数复杂度O(len_s)
使用String类的indexOf(int ch,int fromIndex)将isSubString(String s, String word)函数稍微变一下之后,复杂度O(len_w);
class Solution {
public String findLongestWord(String s, List<String> d) {
String res="";
Collections.sort(d);
for(String w: d){
if(isSubString(s, w)){
if(w.length() > res.length()){
res=w;
}
//else if(w.length() == res.length() && w.compareTo(res)<0){
// res=w;
//}
}
}
return res;
}
public boolean isSubString(String s, String word){
int len_s=s.length();
int len_w=word.length();
if(len_s<len_w){
return false;
}
int start=-1;
for(char c: word.toCharArray()){
int index=s.indexOf(c, start+1);
if(index==-1){
return false;
}
start=index;
}
return true;
}
}
效果: