leetcode-792匹配子序列的单词数(桶)

leetcode-792匹配子序列的单词数(桶)原题链接给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数。示例:输入: S = “abcde”words = [“a”, “bb”, “acd”, “ace”]输出: 3解释: 有三个是 S 的子序列的单词: “a”, “acd”, “ace”。注意:所有在words和 S 里的单词都只由小写字母组成。S 的长度在 [1, 50000]。words 的长度在 [1, 5000]。words[i]的长度在[1, 50]。题解暴力

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接

给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数。

示例:

输入: 
S = "abcde"
words = ["a", "bb", "acd", "ace"]
输出: 3
解释: 有三个是 S 的子序列的单词: "a", "acd", "ace"。

注意:

  • 所有在words和 S 里的单词都只由小写字母组成。
  • S 的长度在 [1, 50000]。
  • words 的长度在 [1, 5000]。
  • words[i]的长度在[1, 50]。

题解

  1. 暴力
class Solution { 
   
public:
    int numMatchingSubseq(string s, vector<string>& words) { 
   
        int res = 0;
        for(auto &word : words){ 
   
            int j = 0,len = 0;
            for(int i = 0;i < s.size();i ++){ 
   
                if(word[j] == s[i])len ++,j ++;
            }
            if(len == word.size())res ++;
        }
        return res;
    }
};
  1. 借鉴桶排序,把所有单词的字符按照word[0]放入对应桶,当字符串扫到对应字符的时候就把桶中的单词放入下一个字符对应的桶即可
class Solution { 
   
public:
    int numMatchingSubseq(string s, vector<string>& words) { 
   
        vector<pair<string,int> > v[26];
        int res = 0;
        for(auto &w : words){ 
   
            v[w[0] - 'a'].push_back({ 
   w,0});
        }
        for(int i = 0;i < s.size();i ++){ 
   
            int c = s[i] - 'a';
            vector<pair<string,int> > t = v[c];
            v[c].clear();
            for(auto &a : t){ 
   
                if(a.second == a.first.size() - 1)res ++;
                else v[a.first[a.second + 1] - 'a'].push_back({ 
   a.first,a.second + 1});
            }
        }
        return res;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168735.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux搭建开源ldap服务器方法

    linux搭建开源ldap服务器方法1.什么是ldap服务器ldap是统一认证服务,它的优点是存储用户认证等不经常改变的信息,有清晰的组织结构。ldap条目概念:基准DN,例如dc=company,dc=com,DN,例如cn=test,dc=company,dc=com,一个DN就是一个条目,RDN是相对DN,具有唯一性,上面例子的DN的RDN就是cn=test2.下载openldapopenld…

    2022年5月15日
  • (1)美团面试题:Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析「建议收藏」

    (一)真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点:(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法就是能够提高插入的效率,但是也会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。(2)扩…

    2022年4月9日
  • Django(22)Django执行SQL语句「建议收藏」

    Django(22)Django执行SQL语句「建议收藏」前言Django在查询数据时,大多数查询都能使用ORM提供的API方法,但对于一些复杂的查询可能难以使用ORM的API方法实现,因此Django引入了SQL语句的执行方法,有以下三种执行方式ext

    2022年7月29日
  • win10JDK环境变量的配置

    win10JDK环境变量的配置在win10系统下进行jdk环境变量与win7的一些区别,作者踩过一些坑,最后通过网上查找资料才将问题解决,但是网上的资料比较零碎,作者整理一下亲自操作过程并且将步骤详细的写了下来,希望能够帮助需要的人。一、下载安装完成jdk之后,桌面右键此电脑选择属性,进入以下界面,然后选择高级系统设置,进入系统配置二、进入系统配置之后点击环境变量,进入环境变量配置窗口三、此时我们可以看到有用户变量…

    2022年7月21日
  • docker 常用命令总结[通俗易懂]

    注意stop,restart后的容器,或者commit后的镜像启动环境变量需要重新加载,比如source/etc/source我们运行docker容器的时候,使用了-d参数,把容器在后台运行后。1.启动dockerdockerrun-d-i-t&lt;imageID&gt;/bin/bash上述命令执行某些命令回报错FailedtogetD-Busco…

    2022年4月17日
  • sql的外连接包括_sql几种连接方式

    sql的外连接包括_sql几种连接方式简述SQL中的“外连接” 1、SQL中外连接分为三种:左外连接、右外连接、全外连接。2、英文书写格式:左外连接:LEFTOUTERJOIN(LEFTJOIN);右外连接:RIGHTOUTERJOIN(RIHTJOIN);全外连接:FULLOUTERJOIN(FULLJOIN)。3、简记:左外连接显示“左边全部的”和“右边与左边相同的”;右外

    2022年8月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号