串联所有单词的子串

  • 题目
  • 思路与算法
  • 代码实现
  • 复杂度分析

题目

1. 注意words组中的word是可以重复的
2. 注意words组中的word是长度相同的。

思路与算法

  1. 此题可以直接想到使用HashMap来求解,因为给定字符串s的长度一定,且words和word的长度都是一定的,所以完全可以靠双遍历全匹配的流程来写
  2. 具体如下,先将words全部存入map1,然后每次s取words中所有word加起来的长度,每次取出这个tmp_s的时候,按照word的长度进行分割,并存入map2,每次截取s并存入map2之后进行比对,如果map1和map2相同,则将当前截取位置加入结果集即可。

代码实现

package com.immunize.leetcode.findSubString;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;public class Solution {public List<Integer> findSubstring(String s, String[] words) {// 结果集List<Integer> list = new ArrayList<>();// 特殊情况处理,此处可以不判断s,会影响最终list的只可能是words相关的len1,len2,len4if (s == null || s.length() == 0 || words == null || words.length == 0)return list;// 初始化使用到的量HashMap<String, Integer> map1 = new HashMap<>();int i, j;int len1 = words[0].length();int len2 = words.length;int len3 = s.length();int len4 = len1 * len2;// 先将当前的words存入map1for (String word : words) {map1.put(word, map1.getOrDefault(word, 0) + 1);}// 再将s进行拆分,因为可以确定拆分的长度,分别进行word长度的二次拆分,放入新的map2for (i = 0; i < len3 - len4 + 1; i++) {String tmp_s = s.substring(i, i + len4);HashMap<String, Integer> map2 = new HashMap<>();for (j = 0; j < len4; j += len1) {map2.put(tmp_s.substring(j, j + len1), map2.getOrDefault(tmp_s.substring(j, j + len1), 0) + 1);}// 对比map1 和 map2,如果相同,则将当前拆分处对应的索引存入list,最后返回list即可。if (map1.equals(map2)) {list.add(i);}}return list;}
}

复杂度分析

  1. 本题时间复杂度为O(N²),因为对于s来讲需要双层循环来判断是否与起始的map1相同。

20200222:串联所有单词的子串(leetcode30)相关推荐

  1. 算法:串联所有单词的子串

    给定一个字符串 s 和一些长度相同的单词 words,找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要 ...

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

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

  3. 【数据结构与算法】之深入解析“串联所有单词的子串”的求解思路与算法示例

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

  4. LeetCode 30. 串联所有单词的子串(字符串哈希)

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

  5. Leetcode 30.串联所有单词的子串

    Time: 20191023 题目描述 给定一个字符串 s 和一些长度相同的单词 words.找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单 ...

  6. LeetCode刷题(python版)——Topic30串联所有单词的子串

    一.题设 给定一个字符串 s 和一个字符串数组 words. words 中所有字符串 长度相同. s 中的 串联子串 是指一个包含  words 中所有字符串以任意顺序排列连接起来的子串. 例如,如 ...

  7. 30. 串联所有单词的子串

    给定一个字符串 s 和一些长度相同的单词 words.找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要 ...

  8. Algorithm:串联所有单词的子串

    给定一个字符串 s 和一些 长度相同 的单词 words .找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能有其他字符 , ...

  9. 【力扣练习记录】30. 串联所有单词的子串

    给定一个字符串 s 和一些长度相同的单词 words.找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要 ...

最新文章

  1. 《以前工作中的三大痛点,只因他们没学Python》
  2. 【软件测试】软件可测试性
  3. 微信被指监听用户,腾讯回应;谷歌意外推送 Android 11 Beta 更新;Linux 5.7 发布 | 极客头条...
  4. [poj] 1235 Farm Tour || 最小费用最大流
  5. 实战Python:利用python在pycharm开发名片管理系统
  6. dataframe 绘图——按照每列出一个图(df.plot)
  7. 现代语音信号处理之语音特征参数估计
  8. 【cs231】损失函数与优化
  9. Evolutionary Clustering of Streaming Trajectories
  10. 【小工具】文件夹映射为本地磁盘(重启不失效)
  11. 抑郁症自测量表测试软件,科学网-抑郁症自测量表(SDS)-李侠的博文
  12. zMUD里的颜色触发
  13. Masked Siamese Networksfor Label-Efficient Learning
  14. Stream报错:stream has already been operated upon or closed
  15. 《智慧彼岸之定心经》
  16. PostgreSQL高可用中间件—Pgpool-Ⅱ
  17. Oracle常用命令(一)
  18. PEGAXY首创科幻类赛马游戏
  19. 业务需求与系统需求的区别
  20. Error Code 1318 Incorrect number of arguments for PROCEDUR

热门文章

  1. Facebook 与 Twitter 再曝漏洞!用户数据再次被共享?
  2. Python 3.8 新功能大揭秘
  3. 抛弃 VS Code 我还能用啥编辑器?| 技术头条
  4. 中兴恢复产能还需数周;前苹果工程师已获保释;iPhone再现爆炸门 | 极客头条...
  5. 倪光南:微软故意放任 Windows 盗版;淘宝为性别歧视道歉;乐视亏损 139 亿 | CSDN极客头条...
  6. aix ntp 配置_aix下开启ntp服务
  7. 老计算机教师,老教师能用好信息技术吗?
  8. linux版本信息i686,Linux下如何查看版本信息
  9. h5 html被缓存,【Web前端问题】html5离线缓存,不能被缓存问题
  10. j - cyk追楠神系列一_「清单」小米烧水杯太萌了,喜茶桂花冻太香了,优衣库新系列太美了!...