leetCode_524、通过删除字母匹配到字典里最长单词

前言

言出必行的我今日的leetCOde每日一题来了,今日为大家带来的是力扣的524题,通过删除字母匹配到字典里最长单词,大家和我一起加油呀!今日没有取研究多种做法,因为我一次成功啦!

在这里插入图片描述

在这里插入图片描述

原题题目

给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。
ps:如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。

题目案例

在这里插入图片描述

题目分析

这道题的题目就比较简单了,就是将两个字符串进行对比,假如说后面数组中的字符串能够从前面的字符串中提取出来,就可以说这一个字符串是符合我们的要求之一的,最后再依次循环下来,找出符合要求,且最长的就可了。

代码解法

这道题就单纯的⽤ O(n^2) 暴⼒循环即可,注意最终解的要求,如果都是最⻓的串,要求输出字典序最 ⼩的那个串,只要利⽤字符串⽐较得到字典序最⼩的串即可。

public String findLongestWord(String s, List<String> dictionary) {
		//分解出s的每个字符
        char[] ch = s.toCharArray();
        String res="";
        for (String s1 : dictionary) {
        	//分解出字符串的每个数值
            char[] ch1 = s1.toCharArray();
            int i = 0, j = 0;
            //记住这里的ch[]对应的是s,ch1[]对应的为dictionary
            for (; i < ch.length && j < ch1.length; ) {
                if (ch[i] == ch1[j]) {
                    j++;
                }
                i++;
            }
            //判断取出的字符串是否完整,与数组中的字符串进行长度对比
            if (j == s1.length()) {
            	//这里注意看一下,如果我们循环后第二次的长度大于第一次的话,直接取后面这个就可以了
            	//但是如果当长度一样时,也可以通过compareTo比较,就可以选择我们最早提出来的哪一个字符串,这是根据案例二专门设计的
                if (s1.length() > res.length() || (s1.length() == res.length() && s1.compareTo(res) < 0)) {
                    res = s1;
                }
            }
        }
            return res;
    }

易错提醒

一定要注意最后比较的哪里,我专门测试了一下,如果不加comperTO()方法比较,他会选择出最后一项数据出来,截图如下
在这里插入图片描述
Ps:每日一句毒鸡汤:做任何事情一定要坚持下去,总会让你看到,失败的那一天。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值