1. 具体题目
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。
示例 1: 输入: s = "abpcplea", d = ["ale","apple","monkey","plea"] 输出: "apple"
2. 思路分析
遍历字符串数组,将其中每个长度大于当前结果值 ans or 长度相同但字典顺序小于 ans 的字符串 str 与 s 比较,若 str 是 s 的子串则更新结果值。而比较过程中可能会出现:s 已经遍历完,而当前 str 还未遍历完,此类情况不应更新结果值。
3.代码
1 public String findLongestWord(String s, List<String> d) { 2 String ans = ""; 3 for(String str : d){ 4 if(str.length() < ans.length() || str.length() == ans.length() && ans.compareTo(str) < 0) continue; 5 int i = 0, j = 0; 6 while(i < s.length() && j < str.length()){ 7 if(s.charAt(i) == str.charAt(j)){ 8 j++; 9 } 10 i++; 11 } 12 if(j == str.length()) 13 ans = str; 14 } 15 return ans; 16 }
leetcode.双指针.524通过删除字母匹配到字典里最长单词-Java
原文:https://www.cnblogs.com/XRH2019/p/11946853.html