给定一个字符串s和一个词典d,找出d中可以由s删除若干字符而得到,最长且按字母排序最靠前的字符串。如s = "abpcplea",d = ["ale","apple","monkey","plea"],则返回"apple"。
方法一:两个字符串从前往后遍历,如果字典里的字符串str所有字符在字符串s中按顺序出现,那么说明str可以由s删除若干字符后得到。记录满足最长且首字母最靠前的即可
public String findLongestWord(String s, List<String> d) {
int length = 0; //记录最大长度
char min = 'z'; //记录最小首字符
String result = "";
for(String str : d){
int i = 0, j = 0;
while(i < s.length() && j < str.length()){
if(s.charAt(i) == str.charAt(j)){
i++;
j++;
}
else i++;
}
if(j == str.length() && j - 1 >= length){ //str可以由s删除字符后得到
if(j - 1 > length){ //长度较长
length = j - 1;
min = str.charAt(0);
result = str;
}
else if(str.charAt(0) < min){ //长度相等,但排序靠前
min = str.charAt(0);
result = str;
}
}
}
return result;
}