题目描述
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。

如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串

思路
对整个问题划分为不同的小问题,对每个小问题求解.

  1. 字典中的每个字符串与目标字符串s进行对比
  2. 写出对比函数
    1. 双指针,分别指向两个字符串
    2. 当前位置相等则都++
    3. 长串遍历结束观察短串指针位置

//对比函数
    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.