当前位置: 首页 > 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.dinnco.com/news/4677.html

相关文章:

  • 可以发布项目的平台百度seo公司哪家强一点
  • 福田附近网站开发公司上海网站建设制作
  • 企业建立网站步骤百度推广哪种效果好
  • 晋江做鞋子批发的网站百度点击器找名风
  • 网站左侧导航代码网络广告营销的概念
  • 杭州91网站建设电脑培训学校网站
  • 公司免费网站注册搜索推广
  • 用c 实现网站开发上海关键词优化排名哪家好
  • 正规的网站建设明细报价表腾讯中国联通
  • 建筑设计网站制作seo关键词优化推广外包
  • 崇信县门户网站真正永久免费的建站系统有哪些
  • 石家庄城乡建设厅网站百度空间登录
  • 手机端网站开发多少钱官网seo
  • 手机app与网站链接中小企业网络营销现状
  • 浦江网站建设建立公司网站需要多少钱
  • 表白网页制作软件手机版seo关键技术有哪些
  • 雷达图 做图网站百度竞价登录入口
  • 安徽美丽乡村建设网站全网最好的推广平台
  • 弄一个网站要多少钱怎么让百度快速收录网站
  • 中国网站制作 第一个百度刷seo关键词排名
  • 建设网站图片百度排行榜风云
  • 临沂网站制作培训哈尔滨seo网络推广
  • 网站建设 上海网站网络营销教程
  • 做昆特牌的网站做公司网站
  • 免费下载网站模板关键词全网搜索工具
  • 搜索引擎网站推广病毒营销案例
  • 做淘宝网站的网络营销是什么
  • 建设一个网站需要多长时间做网站公司
  • 注册网站页面跳转错误杭州seo营销
  • 那类型网站容易做排名专业做网站公司