题目描述:
思路:双指针!
有两种方法:可以先遍历字符串字典,然后通过比较更新最长的单词。也可以先排序字符串字典,再遍历比较。
代码如下:
import java.util.List;
class Solution {
public String findLongestWord(String s, List<String> dictionary) {
//方法1:先遍历,再比较
/*String longgestWord="";
int L1,L2;
for(String target:dictionary){
L1=longgestWord.length();
L2=target.length();
//原来的字符串更长||同样长的情况下,原来的字符串按字典顺序更小
if(L1>L2||(L1==L2)&&longgestWord.compareTo(target)<0){
continue;
}
if(compare(s,target)){//进入比较方法,如果为真,则s中存在target字符串,并更新longgestWord的值
longgestWord=target;
}
}
return longgestWord;
}
private boolean compare(String s, String target) {
int i=0,j=0;
while (i<s.length()&&j<target.length()){
if(s.charAt(i)==target.charAt(j)){
j++;
}
i++;
}
return j==target.length();*/
//方法二:先排序 再遍历
dictionary.sort(((o1, o2) -> {
if (o1.length() != o2.length()) {
return o2.length() - o1.length();
}
return o1.compareTo(o2);
}));
//先排序 最长and字典顺序最小
//双指针:判断s中是否存在j字符串
for (String target : dictionary) {
int i = 0, j = 0;
while (i < s.length() && j < target.length()) {
if (s.charAt(i) == target.charAt(j)) {
j++;
}
i++;
}
if (j == target.length()) {
return target;
}
}
return "";
}
}