524. 通过删除字母匹配到字典里最长单词(中等)

524. 通过删除字母匹配到字典里最长单词

1. 题目描述

题目中转:524. 通过删除字母匹配到字典里最长单词
在这里插入图片描述

2.详细题解

    该题是88. 合并两个有序数组(简单)的变形,使用双指针归并两个有序数组,双指针分别指向一个数组,逐一对比判断数字大小并进行归并。针对此题,通过删除字母匹配到字典里最长单词,针对字典中的每个单词,逐一匹配给出的字符串。
  针对字典的每一个单词,使用双指针分别指向给定的字符串和单词,同合并两个有序数组类似,两个指针均从左至右遍历。逐一判断两个指针指向的字符是否相同,如果相同,右指针(指向单词的指针)向右移动一位,左指针不管是否一致均向右移动一位,当字符串遍历完(左指针已移出字符串末尾)或者单词遍历完(右指针已移除单词末尾)时则停止遍历,此时若右指针指向位置已超出单词末尾则说明能够通过删除字符串中的字符得到单词,此时满足条件,如果当前单词长度大于已知的单词,或者长度相同但字典序更小,则此时更新答案。
  具体算法如下:

  •   Step1:初始化:双指针left=0,right=0,分别指向字符串和单词的第一个字符索引;
  •   Step2:判断指针left和right指向的字符是否相同;
  •   Step3:如果指向的字符相同,则右指针向右移动一个位置,否则不进行操作;
  •   Step4:左指针向右移动一个位置;
  •   Step5:当指针left小于字符串长度且右指针小于单词长度时,重复步骤Step2_Step5.
  •   Step6:匹配循环结束,判断右指针是否等于单词长度;
  •   Step7:如果等于单词长度,则与当前已知字符串进行长度对比,若长度更长或者相同长度下字典序更小则更新答案;
  •   Step8:从字典中取下一个未遍历过的单词,重复上述步骤Step1_Step7;
  •   Step9:所有单词均已遍历,则程序结束。

3.代码实现

3.1 Python

class Solution:
    def findLongestWord(self, s: str, dictionary: List[str]) -> str:
        res = ''
        n = len(s)
        for c in dictionary:
            left, right = 0, 0
            m = len(c)
            while left < n and right < m:
                if s[left] == c[right]:
                    right += 1
                left += 1
            if right == m and len(res) <= m:
                res = c if len(res) < m else min(res, c)
        return res

在这里插入图片描述

3.2 Java

class Solution {
    public String findLongestWord(String s, List<String> dictionary) {
        int m = s.length();
        String res="";
        for (String c : dictionary){
            int n = c.length();
            int left = 0, right = 0;
            while (left < m && right < n){
                if (s.charAt(left) == c.charAt(right)){
                    right++;
                }
                left++;
            }
            if (right == n && n >= res.length()){
                if (n > res.length()){res = c;}
                else{
                    res = c.compareTo(res) < 0 ? c : res; 
                }
            }
        }
        return res;
    }
}

在这里插入图片描述

  执行用时不必过于纠结,对比可以发现,对于python和java完全相同的编写,java的时间一般是优于python的;至于编写的代码的执行用时击败多少对手,执行用时和网络环境、当前提交代码人数等均有关系,可以尝试完全相同的代码多次执行用时也不是完全相同,只要确保自己代码的算法时间复杂度满足相应要求即可,也可以通过点击分布图查看其它coder的code。

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raykingl

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值