✨【Code皮皮虾】通俗易懂,一次遍历 + 双指针怒解【通过删除字母匹配到字典里最长单词】
【摘要】 ✨【Code皮皮虾】通俗易懂,一次遍历 + 双指针怒解【通过删除字母匹配到字典里最长单词】
Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈
🌝题目
🔥解题思路
题目要求返回结果——> 如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。
可以得到的信息:1. 返回的字符串长度要长,在长度相等的情况下要字典序最小,2. 返回的字符串是可以通过删除 s 中的某些字符得到。
根据以上信息,可采用模拟法,即遍历 + 双指针
- 遍历
list
,对每一个字符串进行条件判断 - 通过双指针判断当前字符串是否可以通过删除 s 中的某些字符得到。
✨代码实现
class Solution {
public String findLongestWord(String s, List<String> dictionary) {
//双指针
int left = 0,right = 0;
//结果字符串
String res = "";
int len = dictionary.size();
int len1 = s.length(),len2 = 0;
String tmp = "";
//遍历
for (int i = 0;i < len;i++) {
left = 0;
right = 0;
tmp = dictionary.get(i);
len2 = tmp.length();
//双指针判断
while (left < len1 && right < len2) {
//当前字符相等,指针同时后移
if (s.charAt(left) == tmp.charAt(right)) {
left++;
right++;
}else {
//不等则移动左指针
left++;
}
}
//如果当前下标索引 == 当前字符串的长度,说明匹配才成功
if (right == len2) {
//第一次,直接赋值
if ("".equals(res)) {
res = tmp;
continue;
}
//之后,长度优先判断,再才是字典序判断
if (res.length() < tmp.length()) res = tmp;
else if(res.length() == tmp.length()) res = res.compareTo(tmp) > 0 ? tmp : res;
}
}
return res;
}
}
💖最后
我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以==一键三连哦!==,感谢支持,我们下次再见~~~
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)