524. 通过删除字母匹配到字典里最长单词
给你一个字符串 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] 仅由小写英文字母组成
解题思路
使用双指针可以很直接判断字典里面的字符串,是否属于s的一个子序列。遍历字典中,所有的字符串,找出长度最长且字典序最小,属于s的子序列的字符串
代码
class Solution {public String findLongestWord(String s, List<String> dictionary) {int res=0;String ret="";for(String k:dictionary){if(k.length()>s.length()||!longest(s,k)) continue;if(k.length()>res||ret.length()==0||k.length()==res&&ret.compareTo(k)>0){res=k.length();ret=k;}}return ret;}public boolean longest(String a,String b){int l=0,r=0;while(l<a.length()&&r<b.length()){if(a.charAt(l)==b.charAt(r))r++;l++;}return r==b.length();}
}