✨【Code皮皮虾】通俗易懂,一次遍历 + 双指针怒解【通过删除字母匹配到字典里最长单词】

举报
Code皮皮虾 发表于 2021/09/21 22:34:07 2021/09/21
【摘要】 ✨【Code皮皮虾】通俗易懂,一次遍历 + 双指针怒解【通过删除字母匹配到字典里最长单词】

Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈


🌝题目

点我 ! 力扣链接
image.png



🔥解题思路

题目要求返回结果——> 如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。

可以得到的信息:1. 返回的字符串长度要长,在长度相等的情况下要字典序最小,2. 返回的字符串是可以通过删除 s 中的某些字符得到。

根据以上信息,可采用模拟法,即遍历 + 双指针

  1. 遍历list,对每一个字符串进行条件判断
  2. 通过双指针判断当前字符串是否可以通过删除 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;
    }
}

image.png


💖最后

我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!

创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以==一键三连哦!==,感谢支持,我们下次再见~~~

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。