leetcode.双指针.524通过删除字母匹配到字典里最长单词-Java

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     }

 

 

posted @ 2019-11-28 09:08  les111ley  阅读(180)  评论(0)    收藏  举报