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]。

题解

字典树
字典树节点需要中记录下标,我们再构造新节点时,需要保证在之前遍历的节点的下标之后存在当前字母。详细过程见代码

代码

 struct Tree{int index;bool isWord;Tree* next[26];Tree(int index = -1){for(int i=0; i<26; i++)next[i] = NULL;isWord = false;this->index = index;}};Tree* root;int numMatchingSubseq(string S, vector<string>& words) {int n = words.size(),len = S.length();unordered_map<string,bool> visit;     //记录字符串是否可以被匹配,从而避免重复操作root = new Tree();int ans = 0;for(int i=0; i<n; i++){if(visit.count(words[i]) == 1){ans += visit[words[i]];continue;}Tree* now = root;int j;for(j=0; j<words[i].length(); j++){if(now->next[words[i][j]-'a'] == NULL){      for(int k=now->index+1; k<len; k++){      //之前遍历的节点下标之后找到第一次出现当前字符的下标,从而进行创建新的节点if(words[i][j] == S[k]){Tree* newT = new Tree(k);now->next[words[i][j]-'a'] = newT;break;}}}if(now->next[words[i][j]-'a'] == NULL)  break;now = now->next[words[i][j]-'a'];}if(j == words[i].length()){visit[words[i]] = true;now->isWord = true;ans++;}else   visit[words[i]] = false;        }return ans;}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-matching-subsequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Leetcode 792. 匹配子序列的单词数 C++相关推荐

  1. LeetCode 792. 匹配子序列的单词数(Number of Matching Subsequences)

    792. 匹配子序列的单词数 792. Number of Matching Subsequences 相似题目 392. 判断子序列 转载于:https://www.cnblogs.com/hgli ...

  2. Leetcode 792. 匹配子序列的单词数

    Leetcode 792. 匹配子序列的单词数 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 是从原始字符串中生成的新字符串,可以 ...

  3. 392.判断子序列 | 792.匹配子序列的单词数

    392. 判断子序列 labuladong 题解思路 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成 ...

  4. LeetCode每日一题——792. 匹配子序列的单词数

    LeetCode每日一题系列 题目:792. 匹配子序列的单词数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给定字符串 s 和字符串数组 words, 返回 w ...

  5. LeetCode 0792. 匹配子序列的单词数

    [LetMeFly]792.匹配子序列的单词数 力扣题目链接:https://leetcode.cn/problems/number-of-matching-subsequences/ 给定字符串 s ...

  6. 792. 匹配子序列的单词数

    792. 匹配子序列的单词数 二分搜索 class Solution {public:bool check(string& w, vector<vector<int>> ...

  7. leetcode 792. Number of Matching Subsequences | 792. 匹配子序列的单词数(Java)

    题目 https://leetcode.com/problems/number-of-matching-subsequences/ 题解 一看数据规模,普通暴力解法肯定超时了.想了半天怎么用 Trie ...

  8. 力扣 792. 匹配子序列的单词数

    题目 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改 ...

  9. ​力扣解法汇总792. 匹配子序列的单词数

    目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描 ...

最新文章

  1. 初创公司谁来当你们的运维
  2. webservice、WSDL简介
  3. 手动创建Github pull request
  4. c++全局监听ctrl s_号称史上最全!134个CAD快捷键强烈来袭,难道你只知道Ctrl+C?...
  5. 路径规划之 A* 算法
  6. 加密软件漏洞评测系统_调查:加密货币挖矿仍居恶意软件威胁前列
  7. cmos存储器中存放了_天津大学姚建铨院士,张雅婷副教授JMCC:具有宽光谱调控特性的阻变存储器...
  8. 数据挖掘初次接触!学习代码
  9. 普渡大学计算机硕士申请条件,普渡大学计算机科学硕士专业申请要求
  10. select - I/O多路复用
  11. java rcfile,hsqldb sqltool rcfile不起作用
  12. std::remove_if
  13. 电话机器人源码,语音电话机器人
  14. VB认识强大的ActiveX控件
  15. 时间计算题100道_【高中政治】选择题里面的计算题怎么办(汇率篇)
  16. 使用Kuboard spray部署Kubernetes 1.24.3 集成Harbor私有镜像库
  17. 新手小白建议收藏,美女剪30条视频,在西瓜头条赚了3000元
  18. NISP-SO网络安全运维是什么?安全运维工程师
  19. Unity地图分割组合时出现接缝的处理办法
  20. 一个博士生接受怎样的训练才算是完整、全面的科研训练?

热门文章

  1. gitflow使用指南
  2. 各种Android ui 开源框架
  3. 3550m2 重新linux系统,kgdb+Qemu-KVM调试环境建立方法和所需的相关文件
  4. mac 使用ffmpeg命令合成MP4和srt字幕
  5. pixhawk计算机无法识别,PIXHAWK教程 3.1.2 连接你的遥控输入和电机(Pixhawk)
  6. deconstructSigs|探寻cosmic的独特“气质”-mutation signature !
  7. mysql修改100条数据_sql 修改前100条数据库
  8. Delphi复制HID、ID门禁卡源码
  9. 计算机二级c语言报名照片怎么调,报考计算机二级时对于照片的要求有哪些
  10. 学计算机英语要去拼六级吗,拼搏两个月 大学英语六级终于考到580分