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

公司 网站 苏州关键词在线试听

公司 网站 苏州,关键词在线试听,南通网站建设心得,怎么申请微信公众号力扣——找到字符串中所有字母异位词(点击跳转) 如果 P “abc”,那么下图中的都是它的异位词。 在 S 中找到 P 的异位词后,要返回起始位置的下标。 做这道题之前,我们要知道如何判断两个字符串是否是异位词&#…

力扣——找到字符串中所有字母异位词(点击跳转)
在这里插入图片描述
如果 P = “abc”,那么下图中的都是它的异位词。
在这里插入图片描述
在 S 中找到 P 的异位词后,要返回起始位置的下标。
在这里插入图片描述

做这道题之前,我们要知道如何判断两个字符串是否是异位词,其实我们可以统计每个字符出现的次数,如果两个字符串中每个字符出现的次数相等,那么他们就是异位词。利用哈希表即可
在这里插入图片描述
我们定义一个变量 m 表示 p 字符串的长度,我们将 p 字符串中字母出现的次数存放在 hash1 中,在 s 这个字符串中,找到长度为 m 的子串 ,将次数存放到 hash2 中,然后比较两个哈希表是否相等就可以。
在这里插入图片描述
其实我们没有必要每次都将 m 个字母的次数都存放在哈希表中 ,如下图所示,红色为第一次枚举放入到哈希表中,粉色为第二次枚举放入到哈希表中,被荧光笔涂到的区域其实已经在哈希表中了,没必要再次存放,只需要将 c 从哈希表中删除,在将 e 添加到哈希表中即可
在这里插入图片描述
所以,我们可以使用滑动窗口的方法来解决此问题。
在这里插入图片描述

  1. left = 0,right = 0
  2. 进窗口:hash2[in]++
  3. 判断:right - left + 1 > m
    出窗口:hash2[out]–
    更新结果 :check(hash1,hash2)(比较两个哈希表是否相等)

在更新结果当中,我们需要遍历两个哈希表来进行check,比较麻烦,所以我们对更新结果的判断条件进行优化。

我们定义一个变量 count 来统计窗口有效字符的个数

如下图所示,当 c 进入窗口之后,与 hash1 中 c 字符出现的次数比较,有两种清情况。

  1. 小于等于 hash1 中的……,说明 c 为有效字符,让 count + 1
    在这里插入图片描述
    之后 right 继续右移,然后放入到 hash2 中
  2. 大于 hash1 中的……,count 不更新
    在这里插入图片描述
    接下来,right 右移
    在这里插入图片描述
    right 继续右移
    在这里插入图片描述

此时,窗口大于 m ,让 left 右移,再将第一个 c 从 hash2 中删除之前,我们要先判断此时这个字符出现的次数是否大于 hash1 中的次数,这种情况,显然是大于,那么删掉的就是无效字符,count 不需要变化,此时 c 的个数变成了 1。
在这里插入图片描述
然后我们再判断 count是否等于m,此时count == m,那么窗口中的字符就是 p 的异位词,输出起始位置下标
在这里插入图片描述
接下来的遍历就省略了

  1. 进窗口:hash2[in] <= hash1[in] ——> count++
  2. 出窗口:hash2[out] <= hash1[out] ——> count–
  3. 更新结果:count==m

代码如下:

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ret = new ArrayList<Integer>();char[] s1 = s.toCharArray();char[] p1 = p.toCharArray();int[] hash1 = new int[26];for(char ch : p1){hash1[ch - 'a']++;}int[] hash2 = new int[26];int m = p.length();for(int left = 0,right = 0,count = 0;right < s1.length;right++){char in = s1[right];if(++hash2[in - 'a'] <= hash1[in - 'a']){count++;}if(right - left + 1 > m){char out = s1[left++];if(hash2[out - 'a']-- <= hash1[out - 'a']){count--;}}if(count == m){ret.add(left);}}return ret;}
}

今日任务完成,嘻嘻
在这里插入图片描述

http://www.dtcms.com/wzjs/434933.html

相关文章:

  • 山西设计网站公司推广策划
  • 同一个域名在一个服务器做两件网站外贸网站推广方法之一
  • 泉州建设局网站软文广告有哪些
  • 软件服务外包优化服务公司
  • 用花生壳做网站百度号码
  • 学校网站建设系统外贸如何做网站推广
  • 网站建设哈尔滨网站建设1网购网站十大排名
  • 做网站策划案企业网络营销成功案例
  • 咸阳做网站的公司百度极速版app下载安装挣钱
  • 政务网站建设总结十大最靠谱教育培训机构
  • 做网站常用的背景图像365优化大师软件下载
  • 网站建设微信商城多少钱百度百科合作模式
  • 简单的企业网站php优化大师是什么
  • 河北高端网站设计公司优化大师的作用
  • 提供企业网站建设公司数据分析师35岁以后怎么办
  • 手机表格制作app济南seo优化公司
  • 自己网站怎么做外链厦门seo关键词
  • 广西免费网站制作中央新闻直播今天
  • 网站开发及维护站内关键词自然排名优化
  • 外贸公司图片西安seo公司哪家好
  • 济南做网站的商品关键词怎么优化
  • 大庆企业网站建设公司百度推广代理商
  • 做静态网站软件企业网站优化解决方案
  • 模拟建筑2022手机版福州seo招聘
  • 网站推广服务网址怎样才能被百度秒收录
  • 网站曝光率六种常见的网站类型
  • 迷你世界怎么做网站期网络营销专业就业前景
  • 网站源代码安装seo优化在线
  • 广州网站建设首选快优活动营销
  • 安卓网站建站系统下载b站视频推广的方法有哪些