30. 串联所有单词的子串

这篇具有很好参考价值的文章主要介绍了30. 串联所有单词的子串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

30. 串联所有单词的子串


题目链接:30. 串联所有单词的子串

代码如下:文章来源地址https://www.toymoban.com/news/detail-802149.html

//参考leetcode官方题解
class Solution {
public:
    vector<int> findSubstring(string s, vector<string>& words) {
        vector<int> res;
        
        int sLen=s.size(),wordsLen=words.size(),wordLen=words[0].size();

        for(int i=0;i<wordLen&&i+wordLen*wordsLen<=sLen;i++)
        {   
            unordered_map<string,int> differ;
            //将该组第一个窗口内单词全部放入map中
            for(int j=0;j<wordsLen;j++)
            {
                differ[s.substr(i+j*wordLen,wordLen)]++;
            }

            //计算第一个窗口的单词与单词表中单词的频次差
            for(int i=0;i<words.size();i++)
            {
                if(--differ[words[i]] == 0)
                    differ.erase(words[i]);
            }

            //开始滑动窗口
            for(int start=i;start<sLen-wordLen*wordsLen+1;start+=wordLen)
            {
                //非第一个窗口
                if(start!=i)
                {
                    string word=s.substr(start+(wordsLen-1)*wordLen,wordLen);
                    if(++differ[word]==0)
                        differ.erase(word);

                    //右边单词划出窗口
                    word=s.substr(start-wordLen,wordLen);
                    if(--differ[word]==0)
                        differ.erase(word);
                }

                if(differ.empty())
                {
                    res.push_back(start);
                }
            }
        }

        return res;
    }
};

到了这里,关于30. 串联所有单词的子串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每日OJ题_算法_滑动窗口⑦_力扣30. 串联所有单词的子串

    目录 力扣30. 串联所有单词的子串 解析及代码 30. 串联所有单词的子串 - 力扣(LeetCode) 难度 困难 给定一个字符串  s   和一个字符串数组  words 。   words  中所有字符串  长度相同 。   s   中的  串联子串  是指一个包含   words  中所有字符串以任意顺序排列连接起来的

    2024年01月21日
    浏览(45)
  • 【算法】串联所有单词的子串【滑动窗口】

    滑动窗口

    2024年01月19日
    浏览(44)
  • 【Java刷题篇】串联所有单词的子串

    力扣链接: 串联所有单词的子串 阅读题目后,可以拿到一个关键信息– words中所有字符串长度相等 ,这后续解题思路的一大关键,还有就是串联字串的字符串顺序可以不同。得到这两个关键信息后,我们就很容易联想到运用 滑动窗口 这个算法来解决问题。 好分析完题目后,

    2024年03月22日
    浏览(44)
  • 【LeetCode热题100】【子串】和为 K 的子数组

    题目 给你一个整数数组  nums  和一个整数  k  ,请你统计并返回  该数组中和为  k   的子数组的个数  。 子数组是数组中元素的连续非空序列。 示例 1: 示例 2: 提示: 1 = nums.length = 2 * 104 -1000 = nums[i] = 1000 -107 = k = 107 暴力  直接两层循环找出所有连续子数组的和,这个

    2024年01月19日
    浏览(44)
  • 【算法|动态规划No30】leetcode5. 最长回文子串

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月08日
    浏览(40)
  • LeetCode 1358. 包含所有三种字符的子字符串数目

    滑动窗口的经典题型,直接套模板就行了。

    2024年03月14日
    浏览(59)
  • c 取字符串中的子串

    strcpy(S.ch,ch1) 赋值函数; 字符串没特殊处理,就是从0开始的 %s输出字符串,%c输出字符

    2024年02月07日
    浏览(36)
  • C++string类replace()函数(替换字符串中的子串)

    C++中的string类提供了replace()函数,用于替换字符串中的子串。其函数原型如下: 其中,pos表示要替换的子串在原字符串中的起始位置,len表示要替换的子串的长度,str表示用来替换的字符串。 replace()函数的使用方法非常简单,只需要传入要替换的子串的位置、长度和替换字

    2024年02月05日
    浏览(55)
  • OJ练习第84题——按字典序排在最后的子串

    力扣链接:1163. 按字典序排在最后的子串 给你一个字符串 s ,找出它的所有子串并按字典序排列,返回排在最后的那个子串。 示例 1: 输入:s = “abab” 输出:“bab” 解释:我们可以找出 7 个子串 [“a”, “ab”, “aba”, “abab”, “b”, “ba”, “bab”]。按字典序排在最后的

    2023年04月24日
    浏览(56)
  • 【新2023Q2模拟题JAVA】华为OD机试 - 符合条件的子串长度

    华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南 华为od机试,独家整理 已参加机试人员的实战技巧 给定字符串 A 、 B 和正整数 V , 字符串 A 和 B 的长度相

    2023年04月18日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包