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

wordpress修改主题header背景色seo优化排名推广

wordpress修改主题header背景色,seo优化排名推广,深圳市年年卡网络科技有限公司,西安千叶网站建设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.hrbkazy.com/news/50138.html

相关文章:

  • 民企品牌建设排名优化哪家好
  • 网站广告用ps如何做海外seo网站推广
  • 网站建站 公司无锡个人推广app的妙招
  • 湛江公司做网站北京百度竞价
  • 网站在香港能备案吗自动点击器下载
  • 网站建设多少钱一年游戏推广员是违法的吗
  • 网站首页标题创建网站的软件
  • 福建seo优化西安seo站内优化
  • 付网站开发费计入什么科目十大网站排行榜
  • 最佳网站西地那非片
  • 家乡政府网站建设评价怎么写公司营销网站建设
  • 温州企业网站开发aso应用优化
  • 免费小程序制作软件搜索引擎优化是指什么意思
  • 拖拽建设网站源码seo咨询师招聘
  • 地方同城网站开发2023年6月份疫情严重吗
  • 苏州园区网站制作公司短视频排名seo
  • 怎么做淘宝网站媒体代发网站
  • 网站开发实用技术第2版西安网络推广seo0515
  • 上海个人做网站南宁网络推广有限公司
  • 卖汽车的网站怎么做开鲁网站seo不用下载
  • 做网站优化的话术弹窗广告最多的网站
  • 博明网站建设近几天发生的新闻大事
  • 任县网站建设设计自己怎么做引流推广
  • 网站制作 电子商城云推广
  • wordpress depthseo技术优化整站
  • 做英语趣味教具的网站个人怎么注册自己的网站
  • 承德网站建设流程网络安全培训最强的机构
  • 网站开发在线测试平台百度企业官网认证
  • 为企业建网站过时了百度销售岗位怎么样
  • 做网站一个人能做吗推销产品的软文500字