前言:
作者:神的孩子在歌唱
大家好,我叫运智
524. 通过删除字母匹配到字典里最长单词
难度中等192收藏分享切换为英文接收动态反馈
给你一个字符串 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]
仅由小写英文字母组成
package 双指针;
import java.util.List;
/*
* https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/
*通过遍历每个数组的字符一一匹配
*解释:字典序是指从前到后比较两个字符串的大小的方法。首先比较第一个字符,如果不同则第一个字符较小的字符串更小,
*如果相同则继续比较第2个字符......如此继续,来比较整个字符串的大小。
*/
public class _524_通过删除字母匹配到字典里最长单词 {
public String findLongestWord(String s, List<String> dictionary) {
// 定义返回字符串
String string="";
for(int i=0;i<dictionary.size();i++) {
// 定义双指针,一个指向s,一个指向dictionary
int s_left=0,d_left=0;
// 遍历每一个字符
while(s_left<s.length()&&d_left<dictionary.get(i).length()) {
if (dictionary.get(i).charAt(d_left)==s.charAt(s_left)) {
d_left++;
}
s_left++;
}
// 如果s_left还在s中,说明是匹配完了d_left指向的字符的
if (d_left==dictionary.get(i).length()) {
// 将sting字符串和这个新的字符串作比较,比较依据是最长且字典顺序最小,通过compareTo来比较字符串的ascll码
if (dictionary.get(i).length() > string.length() || (dictionary.get(i).length() == string.length() && dictionary.get(i).compareTo(string) < 0)) {
string = dictionary.get(i);
}
}
}
return string;
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。