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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vim命令搜索_linux的vim

    vim命令搜索_linux的vim尽管目前我们已经涉及Vim的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的Vim教程系列,本文我们将讨论Vim提供的多种搜索技术。不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在Ubuntu14.04,Vim7.4下测试的。Vim中的基础搜索操作当你在Vim中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按…

    2022年10月24日
    0
  • socket技术详解(看清socket编程)

    socket技术详解(看清socket编程)socket编程是网络常用的编程,我们通过在网络中创建socket关键字来实现网络间的通信,通过收集大量的资料,通过这一章节,充分的了解socket编程,文章用引用了大量大神的分析,加上自己的理解,做个总结性的文章1:socket大致介绍   socket编程是一门技术,它主要是在网络通信中经常用到   既然是一门技术,由于现在是面向对象的编程,一些计算机行业的大神通过抽象的理念,在现…

    2022年7月13日
    13
  • 1277. 统计全为 1 的正方形子矩阵(动态规划)

    1277. 统计全为 1 的正方形子矩阵(动态规划)给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。示例 1:输入:matrix =[ [0,1,1,1], [1,1,1,1], [0,1,1,1]]输出:15解释: 边长为 1 的正方形有 10 个。边长为 2 的正方形有 4 个。边长为 3 的正方形有 1 个。正方形的总数 = 10 + 4 + 1 = 15.示例 2:输入:matrix = [ [1,0,1], [1,1,0],

    2022年8月9日
    1
  • VARCHAR 详解[通俗易懂]

    VARCHAR 详解[通俗易懂]varchar(20):20指的是表中的a字段能存储的最大字符个数Incontrastto CHAR, VARCHAR valuesarestoredasa

    2022年8月1日
    4
  • eclipse控制台console乱码「建议收藏」

    eclipse控制台console乱码「建议收藏」情况如下解决:run–&gt;RunConfiguration–&gt;common选择编码

    2022年5月9日
    40
  • java实现反射_java五大原则

    java实现反射_java五大原则一、什么是java反射?二、HelloWorld三、类加载与反射关系四、操作反射的java类五、反射的常用场景六、反射的优缺点

    2022年8月24日
    5

发表回复

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

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