力扣:748. 最短补全词

目录

一.题目

二.解题思路(看的题解)

三.代码

四.题后语


一.题目

        1.给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出 words 中的 最短补全词 。

        补全词 :是一个包含 licensePlate 中所有字母的单词。忽略 licensePlate 中的 数字和空格 不区分大小写。如果某个字母在 licensePlate 中出现不止一次,那么该字母在补全词中的出现次数应当一致或者更多。

        例如:licensePlate = "aBc 12c",那么它的补全词应当包含字母 'a''b' (忽略大写)和两个 'c' 。可能的 补全词 有 "abccdef""caaacab" 以及 "cbca" 。

        要求:请返回 words 中的 最短补全词 。题目数据保证一定存在一个最短补全词。当有多个单词都符合最短补全词的匹配条件时取 words 中 第一个 出现的那个

示例 1:

输入:licensePlate = "1s3 PSt", words = ["step", "steps", "stripe", "stepple"]
输出:"steps"
解释:最短补全词应该包括 "s"、"p"、"s"(忽略大小写) 以及 "t"。
"step" 包含 "t"、"p",但只包含一个 "s",所以它不符合条件。
"steps" 包含 "t"、"p" 和两个 "s"。
"stripe" 缺一个 "s"。
"stepple" 缺一个 "s"。
因此,"steps" 是唯一一个包含所有字母的单词,也是本例的答案。

二.解题思路(看的题解)

        1.先将licensePlate中包含的字母及其个数求出来,用一个数组存储

        2.再将words中的单词一个一个用同样的方法取出字母并放在另一个数组存储

        3.将两个数组进行比较判断word是否满足补全词的条件

        4.将补全词的下标用idx存储

        5.判定补全词是否是最短补全词,并更新idx

三.代码

class Solution {
    public String shortestCompletingWord(String licensePlate, String[] words) {
        int[] scout = new int[26];
        for(int i=0;i<licensePlate.length();i++){//求licensePlaite包含的字母及其个数
            char ch = licensePlate.charAt(i);
            if(Character.isLetter(ch)){
                scout[Character.toLowerCase(ch)-'a']++;
            }
        }
        int idx=-1;
        for(int i=0;i<words.length;i++){
            int[] ct = new int[26];
            for(int j=0;j<words[i].length();j++){//取单个word并求出该单词包含的字母及其个数
                char ch = words[i].charAt(j);
                ct[ch-'a']++;
            }
            boolean flag = true;
            for(int j=0;j<26;j++){//判断word是否包含相应个数的字母
                if(ct[j]<scout[j]){
                    flag=false;
                    break;
                }
            }
            if(flag&&(idx<0||words[idx].length()>words[i].length()))//求到最短补全词
                idx=i;
        }
        return words[idx];
    }
}

四.题后语(

        题目没看完整,我的问题,写这道题的时候题没有看完整,只看到了licensePlate,没有看到words,让我一下无从下手,想不明白是怎么得到的最短补全词,这个单词从哪里取出来的。让我一度以为是有一个包存储了所以单词,然后我看了解析,也没有发现那个地方有调一个神奇的包,甚至第二个部分我都不知道在干什么。以为是把字符串分析了几遍然后生成的单词,然后我重新认认真真的看了一遍题目,好家伙,原来words是这么个东西,真的是蠢到家了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值