力扣随笔之通过删除字母匹配到字典里最长单词(中等524)

思路:根据题意有两个问题待解决

1、s字符串中是否可以通过删减得到该英语词语

2、如何找到长度最长且字母序最小的字符串

针对第二个问题可以对词典dictionary进行预处理:根据长度降序和字母序升序来排序

针对第一个问题可以初始化两个指针i,j分别指向s和英文单词的首位字母开始遍历,若字母相同,则两个指针i,j同时自加,若不同则i自加,寻找s中与英文单词对应位置字母相同的字母;最后当j的大小等于单词长度则说明s可以通过删减得到这个单词,并将其返回

Java实现:

java 复制代码
class Solution {
    public String findLongestWord(String s, List<String> dictionary) {
        Collections.sort(dictionary,new Comparator<String>(){
            public int compare(String word1,String word2){
                if(word1.length() != word2.length()){
                    //word1 > word2 返回负整数
                    //word1 < word2 返回正整数
                    return word2.length() - word1.length();
                }else {
                    //word1 > word2 返回正整数
                    //word1 < word2 返回负整数
                    return word1.compareTo(word2);
                }
            }
        });
        for(String t : dictionary){
            int i = 0,j = 0;//i指向s,j指向t
            while(i < s.length() && j < t.length()){
                if(s.charAt(i) == t.charAt(j)){
                    i++;
                    j++;
                }else {
                    i++;
                }
            }
            if(j == t.length()){
                return t;
            }
        }
        return "";
    }
}

Java给字符串排序那块我看的别人的代码,不是特别理解,希望能有大佬来讲解一下,感谢观看,也欢迎订阅我的力扣随笔,会持续分享解题思路

相关推荐
SsummerC3 分钟前
【leetcode100】杨辉三角
python·leetcode·动态规划
杰杰批4 分钟前
力扣热题100——普通数组(不普通)
算法·leetcode
CodeSheep4 分钟前
稚晖君又添一员猛将!
人工智能·算法·程序员
天天扭码6 分钟前
一分钟解决“3.无重复字符的最长字串问题”(最优解)
前端·javascript·算法
风靡晚11 分钟前
一种改进的CFAR算法用于目标检测(解决多目标掩蔽)
人工智能·算法·目标检测·目标跟踪·信息与通信·信号处理
香宝的最强后援XD25 分钟前
区域填充算法
算法
guitarCC32 分钟前
【裁员感想】
职场和发展
所以遗憾是什么呢?43 分钟前
扩展欧几里得算法【Exgcd】的内容与题目应用
数学·算法·数论·扩展欧几里得·exgcd
haaaaaaarry1 小时前
【贪心】C++ 活动安排问题
开发语言·c++·算法·贪心
ChengZUOZZZ1 小时前
蓝桥杯题目:二维前缀和
java·算法·蓝桥杯