题目描述
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串
思路
对整个问题划分为不同的小问题,对每个小问题求解.
- 字典中的每个字符串与目标字符串s进行对比
- 写出对比函数
- 双指针,分别指向两个字符串
- 当前位置相等则都++
- 长串遍历结束观察短串指针位置
//对比函数
static boolean isSubsequence(String d, String s) {
int j = 0;
for (int i = 0; i < s.length() && j < d.length(); i++) {
if (d.charAt(j) == s.charAt(i)) {
j++;
}
}
return j == d.length();
}
static String findLongestWord(String s, List<String> dictionary) {
String max_d = "";
for (String d : dictionary) {
if (isSubsequence(d, s)) {
if (max_d.length() < d.length() || (d.length() == max_d.length() && d.compareTo(max_d) < 0)) {
max_d = d;
}
}
}
return max_d;
}
public static void main(String[] args) {
List<String> dictionary = new ArrayList<>(Arrays.asList("abe", "abc"));
System.out.println(findLongestWord("abce", dictionary));
}
踩坑:
记录最大子串的判断条件
if (max_d.length() < d.length() || (d.length() == max_d.length() && d.compareTo(max_d) < 0))
Q.E.D.