给定一个字符串 和一些长度相同的单词 words。 s 中找出可以恰好串联 words 中所有单词的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

示例 1:

输入:s = "barfoothefoobarman",words = ["foo","bar"]
输出: [0,9]解释: 从索引 0 和 9 开始的子串分别是 "barfoor" 和 "foobar" 。
输出的顺序不重要, [9,0] 也是有效答案。

示例 2:

输入:s = "wordgoodstudentgoodword",words = ["word","student"]
输出: []
  • 这道题我们需要用到两个哈希表,第一个哈希表先把所有的单词存进去,然后从开头开始一个个遍历,停止条件为当剩余字符个数小于单词集里所有字符的长度。
  • 这时候我们需要定义第二个哈希表,然后每次找出给定单词长度的子串,看其是否在第一个哈希表里,如果没有,则break,如果有,则加入第二个哈希表,但相同的词只能出现一次,如果多了,也break。如果正好匹配完给定单词集里所有的单词,则把i存入结果中。

class Solution {
public:
    vector<int> findSubstring(string s, vector<string>& words) {
        vector<int> res;
        if (s.empty() || words.empty()) 
            return res;
        int n = words.size(), m = words[0].size();
        unordered_map<string, int> m1;
        for (auto &a : words) ++m1[a];
        for (int i = 0; i <= (int)s.size() - n * m; ++i) 
        {
            unordered_map<string, int> m2;
            int j = 0; 
            for (j = 0; j < n; ++j) 
            {
                string t = s.substr(i + j * m, m);
                if (m1.find(t) == m1.end()) 
                    break;
                ++m2[t];
                if (m2[t] > m1[t]) break;
            }
            if (j == n) 
                res.push_back(i);
        }
        return res;
    }
};

30. 与所有单词相关联的字串相关推荐

  1. LeetCode(30):与所有单词相关联的字串

    Hard! 题目描述: 给定一个字符串 s 和一些长度相同的单词 words.在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能 ...

  2. leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法

    题目描述 给定一个字符串 s 和一些长度相同的单词 words.在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置. You are given a string, s, and a ...

  3. 030 Substring with Concatenation of All Words 与所有单词相关联的字串

    给定一个字符串 s 和一些长度相同的单词 words,找出 s 与 words 中所有单词(words 每个单词只出现一次)串联一起(words中组成串联串的单词的顺序随意)的字符串匹配的所有起始索引 ...

  4. 【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符

    前言 mybatis 3.4.6 错误代码 mybatis XML mapper 错误 <select id="selectxxxList" parameterType=&q ...

  5. 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。

    解决方案:用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 解决方案:用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 今天进行身份验证时, ...

  6. CSS将样式规则与HTML元素相关联

    CSS通过将规则与HTML元素相关联的方式来工作,这些规则用来控制指定元素的内容如何显示. 一条CSS规则包含两个部分:一个选择器和一条声明. 示例: P{         ------- ----- ...

  7. DataReader 要在事务提交前 CLOSE 掉 否则会报一个:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。...

    DataReader 要在事务提交前 CLOSE 掉 否则会报一个:已有打开的与此命令相关联的 DataReader,必须首先将它关闭. 转载于:https://www.cnblogs.com/run ...

  8. LeetCode 30串联所有单词的子串31下一个排列

    标题 串联所有单词得字串 下一个排列 维护真的不易,如有帮助还请点赞关注,关注公众号bigsai回复进群即可加入打卡. 串联所有单词得字串 题目描述: 给定一个字符串 s 和一些长度相同的单词 wor ...

  9. 0X8009310B (ASN:276) win7安装证书时出现错误消息:找不到与此证书文件相关联的证书申请微软官方文档

    原文:http://support.microsoft.com/kb/959216#top 您尝试通过使用 IIS 7.0 管理器安装证书时出现错误消息:"找不到与此证书文件相关联的证书申请 ...

  10. 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭

    已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭 引用:   http://www.cnblogs.com/maxao/archive/2011/03/18/19881 ...

最新文章

  1. 干货!神经网络原来是这样和数学挂钩的
  2. PHP数据库链接类(PDO+Access)
  3. 【计算机网络】数据链路层 : 局域网基本概念 ( 局域网分类 | 拓扑结构 | 局域网特点 | 局域网传输介质 | 介质访问控制方法 | IEEE 802 | 链路层 LLC、MAC 控制子层 )
  4. matlab碎纸拼接相似函数,基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法
  5. 牛客练习赛42 A 字符串
  6. 解决orcale报ORA-28001: the password has expired
  7. 数字图像处理之图像几何变换
  8. LeetCode 134 Gas Station
  9. 《php100 视频教程》笔记心得 张恩民 php100 (张迅雷闪击php系列)
  10. jpg转word免费的软件
  11. java使用openoffice/libreoffice进行office转pdf
  12. ps-黑白老照片快速上色
  13. WPS2007去广告
  14. windows上配置深度学习(李沐-动手学深度学习)
  15. [leetcode Q50] Pow(x, n)
  16. 动态规划——最长非降子序列
  17. 4、Kafka API实战
  18. 塔尔斯基学派代表作—模型论(教科书)
  19. 大型网站架构 图片服务器分离
  20. Witt向量简介 §3.2.3:Witt环除运算封闭性外的其他环条件的验证

热门文章

  1. ASP.NET 2.0运行原理及其过程简要分析
  2. rocketmq 同步双写
  3. jQuery源码分析系列(31) : Ajax deferred实现
  4. 管理之道(七) - 不可奖励员工错误的行为
  5. 用struts拦截器实现登录验证功能AuthorizationInterceptor
  6. 简述物联网感知技术_雄芯一号芯片发布 智慧城市物联网感知体系升级换新
  7. java中utilities类_Java SwingUtilities类
  8. 斐波那契数列——O(1)算法
  9. 温故知新----表格
  10. 三路划分快速排序 java_程序员面试—快速排序的三路划分