前言
言出必行的我今日的leetCOde每日一题来了,今日为大家带来的是力扣的524题,通过删除字母匹配到字典里最长单词,大家和我一起加油呀!今日没有取研究多种做法,因为我一次成功啦!
原题题目
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。
ps:如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。
题目案例
题目分析
这道题的题目就比较简单了,就是将两个字符串进行对比,假如说后面数组中的字符串能够从前面的字符串中提取出来,就可以说这一个字符串是符合我们的要求之一的,最后再依次循环下来,找出符合要求,且最长的就可了。
代码解法
这道题就单纯的⽤ O(n^2) 暴⼒循环即可,注意最终解的要求,如果都是最⻓的串,要求输出字典序最 ⼩的那个串,只要利⽤字符串⽐较得到字典序最⼩的串即可。
public String findLongestWord(String s, List<String> dictionary) {
//分解出s的每个字符
char[] ch = s.toCharArray();
String res="";
for (String s1 : dictionary) {
//分解出字符串的每个数值
char[] ch1 = s1.toCharArray();
int i = 0, j = 0;
//记住这里的ch[]对应的是s,ch1[]对应的为dictionary
for (; i < ch.length && j < ch1.length; ) {
if (ch[i] == ch1[j]) {
j++;
}
i++;
}
//判断取出的字符串是否完整,与数组中的字符串进行长度对比
if (j == s1.length()) {
//这里注意看一下,如果我们循环后第二次的长度大于第一次的话,直接取后面这个就可以了
//但是如果当长度一样时,也可以通过compareTo比较,就可以选择我们最早提出来的哪一个字符串,这是根据案例二专门设计的
if (s1.length() > res.length() || (s1.length() == res.length() && s1.compareTo(res) < 0)) {
res = s1;
}
}
}
return res;
}
易错提醒
一定要注意最后比较的哪里,我专门测试了一下,如果不加comperTO()方法比较,他会选择出最后一项数据出来,截图如下
Ps:每日一句毒鸡汤:做任何事情一定要坚持下去,总会让你看到,失败的那一天。