当前位置: 首页 > news >正文

帝国和织梦那个做企业网站好昆明网站开发推广公司

帝国和织梦那个做企业网站好,昆明网站开发推广公司,怎么做校园表白网站,云主机安装多个网站题目链接 串联所有单词的子串 题目描述 注意点 words[i] 和 s 由小写英文字母组成1 < words.length < 5000可以以 任意顺序 返回答案words中所有字符串长度相同 解答思路 根据滑动窗口哈希表解决本题&#xff0c;哈希表存储words中所有的单词及单词的出现次数&#…

题目链接

串联所有单词的子串

题目描述


注意点

  • words[i] 和 s 由小写英文字母组成
  • 1 <= words.length <= 5000
  • 可以以 任意顺序 返回答案
  • words中所有字符串长度相同

解答思路

  • 根据滑动窗口+哈希表解决本题,哈希表存储words中所有的单词及单词的出现次数,滑动窗口时使用另一个哈希表存储当前窗口内已经出现的单词及单词的出现次数
  • 因为words中所有字符串长度相同,所以在移动滑动窗口右边界时应该以单词为维度,每次移动wordLen个单位,然后判断该部分单词rightWord是否能作为串联串联所有单词的子串的一部分,有以下三种情况:
    • 如果rightWord根本不属于words中的单词,说明包含该单词时的子串一定不满足题意,此时需要将滑动窗口直接移动到该单词右侧,也就是直接重置滑动窗口的左右边界
    • 如果rightWord属于words中的单词,但是当前滑动窗口中该单词数量已经达到words中该单词的最大数量,此时需要移动滑动窗口的左边界,移动时每次也同样移动wordLen个单位,直到左侧找到一个与rightWord相同的值leftWord(一定能找到),将滑动窗口左边界移动到leftWord右侧
    • 如果rightWord属于words中的单词,且当前滑动窗口中该单词数量还未超过words中该单词的最大数量,此时满足题意,继续移动滑动窗口右边界(注意判断该滑动窗口已经是串联所有单词的子串的情况)
  • 上述过程并未判断所有情况,因为每次移动边界时都是以wordLen为单位,如果从字符串首位置开始,可能会忽略1,2…(wordLen - 1)为起始位置的情况,观察规律可得,只需要对1,2…(wordLen - 1)为起始位置都执行一次上述的操作就可以考虑到所有的情况

代码

class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> res = new ArrayList<>();int wordSum = words.length;int wordLen = words[0].length();if (s.length() < wordSum * wordLen) {return res;}Map<String, Integer> map = new HashMap<>();for (String word : words) {map.put(word, map.getOrDefault(word, 0) + 1);}for (int i = 0; i < wordLen; i++) {int left = i;int right = i;int currWordSum = 0;Map<String, Integer> visitedMap = new HashMap<>();while (right + wordLen <= s.length()) {// 长度越界,剩下的子串一定无法串联所有单词if (left + (wordSum - currWordSum) * wordLen > s.length()) {break;}String leftWord = s.substring(left, left + wordLen);String rightWord = s.substring(right, right + wordLen);// 该单词不存在,则有该单词的部分都一定不满足题意,将滑动窗口左边界移动至该单词右侧if (map.get(rightWord) == null) {left = right + wordLen;visitedMap = new HashMap<>();currWordSum = 0;}// 该单词存在但words中已经没有该单词if (map.get(rightWord) != null && visitedMap.getOrDefault(rightWord, 0) >= map.get(rightWord)) {while (left < right && !rightWord.equals(leftWord)) {visitedMap.put(leftWord, visitedMap.get(leftWord) - 1);left += wordLen;leftWord = s.substring(left, left + wordLen);currWordSum--;}left += wordLen;}// 该单词存在满足题意if (map.get(rightWord) != null && visitedMap.getOrDefault(rightWord, 0) < map.get(rightWord)) {visitedMap.put(rightWord, visitedMap.getOrDefault(rightWord, 0) + 1);currWordSum++;// 已找到串联所有单词的子串if (currWordSum == wordSum) {res.add(left);visitedMap.put(leftWord, visitedMap.get(leftWord) - 1);currWordSum--;left += wordLen;}}right += wordLen;}}return res;}
}

关键点

  • 滑动窗口的思想
  • 移动滑动窗口时其对应的哈希表的变化
  • 移动滑动窗口右边界时对应单词是否是串联所有单词的子串的三种情况
http://www.ds6.com.cn/news/120607.html

相关文章:

  • 赌博网站做维护犯罪上海网站关键词排名优化报价
  • 软件开发流程及主要岗位seo外链在线提交工具
  • 适合新手做的网站宣城网站seo
  • 新闻头条新闻关于近期重大事件乌鲁木齐seo
  • 淘宝的网站是怎么做的网站制作企业
  • 中国上海门户网站公众号企业文化建设
  • 网站关键词排名检测工具班级优化大师官网登录
  • 万网官网43995000元网站seo推广
  • html企业网站怎么做广州新一期lpr
  • 泰安集团网站建设报价现在有什么推广平台
  • 网站 根目录 虚拟目录地推怎么做最有效
  • 做网站有什么市场风险网络推广怎么做
  • 外贸单在哪些网站做如何用模板做网站
  • 用wordpress做的博客优化公司网站排名
  • 杭州网站推广平台常德网站seo
  • 网站排名权重怎么做百度地址如何设置门店地址
  • 关于做网站的策划方案百度联盟广告收益
  • 手机网站判断跳转代码怎么写百度提交收录入口
  • 响水做网站哪家公司好生意参谋指数在线转换
  • 移动web网站开发实训目的产品推广软文500字
  • 东莞高端网站建设费用旧版优化大师
  • web前端开发框架全面落实疫情防控优化措施
  • 网站建设学校培训班巨量引擎
  • 集团网站建设特色seo收费标准
  • 艺术设计专业seo排名技巧
  • wordpress 为什么评论不能显示南宁seo渠道哪家好
  • 头条网站怎么做的一级造价工程师
  • dwcc2017怎么做网站seo学校培训班
  • 珠海门户网站建设公司商丘搜索引擎优化
  • 浙江平安建设网站成都高端品牌网站建设