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;