问题描述:
给你一个字符串 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] 仅由小写英文字母组成
解法一:
还是得参考三叶姐的,自己写的时候,老出现问题。(我太菜了┭┮﹏┭┮)
注释里写了题解
//排序 按照 字符串长度(优先级2) 字典序排序
/*
* 这里sort就是按照字典序排序
*
* 重写的方法是安装字符串长度排序
*/
Collections.sort(list, (a,b)->{
if (a.length() != b.length()) return b.length() - a.length();
return a.compareTo(b);
});
//在排序后的list中单词找第一与s单词 (字母一样)
int n=s.length();
for(String ss: list) {
//双指针
int i=0;
int j=0;
int m=ss.length();
while(i<n&&j<m) {
//j记录ss的相同字母
if(s.charAt(i)==ss.charAt(j)) {
j++;
}
i++;
}
//j==m 说明s中是有ss这个单词 并 返回该单词
if(j==m) return ss;
}
return "";
}
运行结果: