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

php网站开发图片影视后期制作培训班价格

php网站开发图片,影视后期制作培训班价格,全球互联网企业排名,邯山企业做网站推广1.问题描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …

1.问题描述

        给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

        示例1

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

        示例2 

输入: s = "abab", p = "ab"
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。

        提示

  • 1 <= s.length, p.length <= 3 * 104
  • s 和 p 仅包含小写字母

        难度等级

        中等

        题目链接

        找到字符串中所有字母异位词

2.解题思路

        这道题要我们找出s字符串中p的所有字母异位词,首先我们可以知道的就是,既然是要找p的字母异位词,那我们从s中找的子串长度就必须和p一样,那么我们也就可以向排除一些情况,那就是如果s的长度比p的长度还小,那s中就不可能有p的字母异位词了。

        //获取字符串的长度int sLength = s.length();//窗口大小int pLength = p.length();//如果s的长度小于p的长度,s中不可能有p的字母异位词if(sLength < pLength){return new ArrayList<>();}

        接着,因为p的长度是固定的,我们要在s中寻找p长度的子串,如果了解过滑动窗口的人,很容易就可以想到,我们可以用滑动窗口来寻找s中是p的字母异位词的子串,窗口的大小就是p的长度。

        由于字母异位词字符随便排序的问题,我们无法通过正常的比较来判断我们找到的子串是否为p的字母异位词,但是字母异位词无序但字母个数一定的这个特点给我们提供了突破口。我们可以通过比较p中各个字符出现的次数是否与我们在s中找到的子串的字符个数相等,是的话,我们找到的子串就是那个排序可能与p不同的字母异位词了。

        解决了如何找到字母异位词的思路之后,我们还有解决的一个问题就是用什么来存储字符出现个数的问题。我想大家对key-value的数据类型应该不陌生吧,我们可以使用key-value的结果来存储字符出现的个数,从而实现O(1)时间复杂度的增加和修改。提到key-value类型,大部分人应该第一时间就能想到用hashMap来存储。但是在这道题里面,可以不用hashMap来存储,可以直接使用数组来存储即可。由于题目告诉我们,s和p仅包含小写字母,也就数说顶天了也就只有26个字符,而且它们的ASCII码都是连续的,所以我们可以将字符减去第一个小写字母'a'的ASCII码,就可以将它们与数组的索引按顺序匹配起来,所以我们可以只有数据就来实现26个小写字母的key-value的统计。

        //初始化两个数组用于存储字母出现的次数int[] sArr = new int[26];int[] pArr = new int[26];

        创建完两个用于统计的数组之后,我们就可以开始初始化这两个数组了。将p从所有出现的字符统计到pArr(统计p的数组)中,并将s中前pLength(窗口大小)个字符统计到sArr(统计s子串的字符)中,这样我们就实现了两个统计数组的初始化了。我们再定义一个List集合用于存储所有的结果,我们的准备工作就做完了。

//存储异位词子串起始索引List<Integer> data = new ArrayList<>();//初始化两个数组(统计p中的字符个数并且统计s的前pLength个字符的个数)for(int i = 0;i < pLength;i++){sArr[s.charAt(i) - 'a']++;pArr[p.charAt(i) - 'a']++;}   

        接着,我们就可以来开始遍历s字符串了,因为我们已经统计了一部分字符串,所以我们可以先比较当前窗口中的子串是否和p是字母异位词,比较两个数组中各个字符的数量是否相等,是的话,则将窗口的起始索引(当前索引-窗口大小)存入List集合中。比较完之后,窗口开始向当前索引滑动,减去统计数组中窗口左边界的字符次数,因为它被滑出了,不在窗口之内了,然后再加上当前索引的字符的次数,因为窗口滑动后将它包含在内了。

         //比较两个窗口中字符出现的个数是否相等,是则为字母异位词if(Arrays.equals(sArr,pArr)){//i-窗口大小即为起始索引data.add(i - pLength);}//移动窗口,减去移动前左边界的字符sArr[s.charAt(i-pLength) - 'a']--;//加上移动后右边界的字符sArr[s.charAt(i) - 'a']++;

        不断的重复上述操作,知道窗口滑到s字符串的最右边为止。

        退出循环之后,最后比较一下窗口中的子串是否为p的字母异位词,因为最后一次滑动之后,不会再进入循环,所以最后一次滑动没有去判断是否为字母异位词,要给它不上。

        //最后再比较一次是否是字母异位词if(Arrays.equals(sArr,pArr)){data.add(sLength - pLength);}

        补上最后一次判断之后,就可以直接返回结果了。

3.代码展示

class Solution {public List<Integer> findAnagrams(String s, String p) {//获取字符串的长度int sLength = s.length();//窗口大小int pLength = p.length();//如果s的长度小于p的长度,s中不可能有p的字母异位词if(sLength < pLength){return new ArrayList<>();}//初始化两个数组用于存储字母出现的次数int[] sArr = new int[26];int[] pArr = new int[26];//存储异位词子串起始索引List<Integer> data = new ArrayList<>();//初始化两个数组(统计p中的字符个数并且统计s的前pLength个字符的个数)for(int i = 0;i < pLength;i++){sArr[s.charAt(i) - 'a']++;pArr[p.charAt(i) - 'a']++;}   //开始遍历(从pLength开始)for(int i = pLength;i < sLength;i++){//比较两个窗口中字符出现的个数是否相等,是则为字母异位词if(Arrays.equals(sArr,pArr)){//i-窗口大小即为起始索引data.add(i - pLength);}//移动窗口,减去移动前左边界的字符sArr[s.charAt(i-pLength) - 'a']--;//加上移动后右边界的字符sArr[s.charAt(i) - 'a']++;}//最后再比较一次是否是字母异位词if(Arrays.equals(sArr,pArr)){data.add(sLength - pLength);}return data;}}

4.总结

        这道题的难点主要在于能不能想到用字符的个数是否相等来判断是否为字母异位词,至于用什么数据结构来存储字母的个数,其实都可以,只是用数组比直接用hashMap更加节省空间罢了,直接用hashMap也可以解决这道题,差别不是很大。好了,今天这道题就啰嗦到这里了,祝大家早日拿到offer!

http://www.yayakq.cn/news/901556/

相关文章:

  • 怎样申请做c c 网站苏州建站推广公司
  • 网站建设 广州建建设网站的企业
  • 寻花问柳专注做一家男人爱的网站外贸仿牌网站被封的后果
  • 潍坊建设网站的公司电话网站被黑 禁止js跳转
  • 安阳企业网站优化排名松江网站建设公司怎么样
  • 2018年做淘宝客网站还能挣钱吗6网站建设 业务
  • 那个网站做的系统最好百度快照怎么看
  • 微商城微网站开发中企动力地址
  • 网站设计就业压力制作网页前端
  • 长沙优化网站技术厂家com域名续费一年要多少钱
  • cms下载官方网站建设一个视频教学网站
  • 在ps中做网站首页的尺寸调用wordpress文章
  • 网站建设找好景科技网站建设论文3000
  • 如何分析网站功能网站建设方案博客
  • 东莞网站设计公司有哪些被忽悠去做网销了
  • 万维网中文网站到期网站建设需要的服务器
  • 360网站建设广州哪家做网站最好
  • 做内销网站php 微信 网站开发
  • 端掉一个wordpress网站莱芜租房
  • 博客网站入口纵横seo助手
  • 商务网站开发步骤株洲网站建设兼职
  • 网站页面文案无锡网站seo外包
  • 唐山网站制作服务公司重装 wordpress
  • 广州网站建设网络科技有限公司做网站建设怎么样
  • 网络科技有限公司是干嘛的企业网站seo参考文献
  • 济南网站制作公司哪家技术好凡科与wordpress
  • 做梯子的企业网站免费一键生成个人网站
  • 个人申请网站百度h5为什么发布不了
  • 商派商城网站建设公司wordpress软件推荐
  • 化妆品网站制作《基层建设》在哪个网站收录的