Leetcode 748. 最短补全词(今天结束)
Published on 2022-05-28 18:40 in 暂未分类 with 萧海~

Leetcode 748. 最短补全词(今天结束)

    在这里插入图片描述
    给你一个字符串 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" 是唯一一个包含所有字母的单词,也是本例的答案。

    示例 2:

    输入:licensePlate = "1s3 456", words = ["looks", "pest", "stew", "show"]
    输出:"pest"
    解释:licensePlate 只包含字母 "s" 。所有的单词都包含字母 "s" ,其中 "pest""stew"、和 "show" 三者最短。答案是 "pest" ,因为它是三个单词中在 words 里最靠前的那个。

    提示:

    • 1 <= licensePlate.length <= 7
    • licensePlate 由数字、大小写字母或空格 ' ' 组成
    • 1 <= words.length <= 1000
    • 1 <= words[i].length <= 15
    • words[i] 由小写英文字母组成

    Code:

    class Solution {
    public:
    typedef struct
    {
    int index;
    string str;
    }para;
    static bool cmp(const para&s1,const para &s2)
    {
    if(s1.str.length()==s2.str.length())
    {
    return s1.index<s2.index;
    }
    return s1.str.length()<s2.str.length();
    }
    string shortestCompletingWord(string licensePlate, vector<string>& words) {
    map<char,int>mymap;
    vector<para>res;
    for(int i=0;i<licensePlate.size();i++)
    {
    if(tolower(licensePlate[i])>='a'&&tolower(licensePlate[i]<='z'))
    {
    mymap[tolower( licensePlate[i])]++;
    }
    }
    for(int i=0;i<words.size();i++)
    {
    map<char,int>temp;
    for(int j=0;j<words[i].length();j++)
    {
    temp[tolower(words[i][j])]++;
    }
    map<char,int>::iterator it;
    bool flag=false;
    for(it=mymap.begin();it!=mymap.end();++it)
    {
    if(temp[it->first]<it->second)
    {
    flag=true;
    break;
    }
    }
    if(!flag)
    {
    para p;
    p.index=i;
    p.str=words[i];
    res.push_back(p);
    }
    }
    sort(res.begin(),res.end(),cmp);
    cout<<res[0].str<<endl;
    return res[0].str;
    }
    };
    posted @   萧海~  阅读(23)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换