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

网站搭建软件推广活动策划方案范文

网站搭建软件,推广活动策划方案范文,网站开发建设计入什么科目,vi设计案例分析1.题目介绍 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 1 < s.length, p.length < 3 * 104s 和 p 仅包含小写字母 意思就是&#xff0c;假设你有一个字符串“abc”&#xff0c;需…

1.题目介绍

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

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

意思就是,假设你有一个字符串“abc”,需要你找出在字符串“cbaebabacd”中所有出现过的位置的索引(包括“abc”打乱顺序的所有情况),比如“abc”、“acb”、“bac”、“bca”、“cab、“cba”。

2.解决思路

要解决这个问题,我们首先可以确定字符串p的长度是固定的,所以第一步我们可以确定使用滑动窗口。但是需要考虑p打乱顺序的所有情况,而常用的集合contains()方法需要对每次集合进行遍历,在p长度过高时效率过低,时间复杂度为O(n),因此我们选择采用频率数组。即维护一个数组记录字符串p中每一个字符出现的频率,根据数组下标可直接访问(仅考虑小写字母),时间复杂度为O(1)。

3.步骤讲解

        1.首先预初始化一个整型集合,用来存储所有结果下标

        2.添加预判断条件,即s、p的长度不为0,s的长度不小于p的长度;因为这几种情况遍历无               效。返回空集合

        3.初始化p的频率数组和窗口频率数组,长度为26(对应a-z)

        4.遍历p,字符串p中每个字符每出现一次,用每个遍历到的字符-‘a’得到对应ASCLL码的差               值,差值即为频率数组存储该字符位置的下标,通过该下标对对应位置+1,表示该字符出               现了一次

        5.设置一个整型变量WindowsSize用来记录窗口的长度,窗口长度与p长度相等;设置整型               变量left、right,分别用来记录窗口的左右索引位置,维护窗口。

        6.初始化窗口,从s的零号索引开始,用窗口频率数组记录其字符出现的频率,每次                           right+1,直到right == windowsSize,此时right-left = 窗口的长度,right所指向的位置是窗             口待处理的位置的索引

        7.此时开始循环移动窗口,首先判断当前窗口频率数组与p频率数组是否相等,如果相等,则             将此时的left(指向窗口起始索引)加入结果集合中;然后将right所指向的位置(下一                   次等待处理的元素)的元素在窗口频率数组对应位置+1,然后移动right+1;对left当前指向             的元素对应的窗口频率数组中-1,然后移动left+1;继续循环,判断条件(窗口右边界的下               一位置right<=s的长度)

        8.当right == s.length()时,此时right指向最大索引的下一位置,所有索引元素被处理完毕

4.代码展示

public List<Integer> findAnagrams(String s, String p) {// 初始化结果集合List<Integer> result = new ArrayList<>();// 预判断条件if (s.length() == 0 || p.length() == 0 || s.length() < p.length()) return result;int[] pCount = new int[26];   // 存储p的字符频率int[] window = new int[26];   // 存储窗口的字符频率// 初始化频率数组(p中字符每出现一次,找到对应下标的位置将其频率+1)for (char c : p.toCharArray()) {pCount[c - 'a']++;}// 设置窗口大小=p的长度int windowSize = p.length();int left = 0, right = 0;// 初始化第一个窗口while (right < windowSize) {window[s.charAt(right) - 'a']++;right++;}// 滑动窗口主循环while (right <= s.length()) {// 检查是否匹配if (Arrays.equals(pCount, window)) {result.add(left);}// 移动窗口右边界if (right < s.length()) {window[s.charAt(right) - 'a']++;}right++;// 移动窗口左边界window[s.charAt(left) - 'a']--;left++;}return result;
}

至于为什么先对窗口的元素频率进行+1再移动right+1,是因为要时刻保持窗口的大小不变=p的长度,而right指向的位置实际上是窗口索要移动的下一位置。先对下一位置(right)的元素进行+1,在将right移动到再下一次所要处理的位置;先对left指向的位置的元素频率进行-1,再移动left+1。这样就保证了窗口大小恒定不变。

5.执行结果

在leetcode测试用例中平均耗时13ms

 内存分布43.84MB

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

相关文章:

  • 设计网站公司的账务处理排名优化课程
  • 动态网站开发的集成软件有哪些网络推广的几种方式
  • 东莞企业网站推广技巧各大网站收录提交入口
  • 如何做网站结构优化天津seo选天津旗舰科技a
  • 网站要实名认证吗珠海网站建设优化
  • 岳阳建设网站网站推广找哪家公司好
  • 网站制作多少钱资讯谷歌浏览器网页版进入
  • 智能网站建设软件站长之家网站模板
  • 网站建设的wbs分解陕西新闻今日头条
  • 做网站需要下什么软件合肥网络推广营销
  • 正规的食品行业网站开发电脑优化用什么软件好
  • 口碑好的邯郸网站建设宣传推广渠道有哪些
  • 涿州城乡建设局网站北京seo营销公司
  • 美女学习资料网站免费成都网络推广公司
  • ibm用来做测试的网站抚顺优化seo
  • 如何个网站做二维码网上营销怎么做
  • 网站建设公司的会计分录百度广告竞价
  • 专业网站建设专家广告联盟平台挂机赚钱
  • 做机械方面外贸最大的网站seo的外链平台有哪些
  • 阿里巴巴网站建设的不足之处安卓优化大师2021
  • 有专门做特产的网站吗关键词查询网站
  • 怎样建设小游戏网站北京网站推广
  • 网站制作大连如何建立自己的网站?
  • 龙江网站开发长沙seo服务
  • ps设计网站首页界面如何优化网络速度
  • 新郑市网站建设定制开发nba最新消息新闻报道
  • 政府门户网站建设自查报告如何做推广呢
  • wordpress外网seo优化方案策划书
  • 网站建设与开发 期末作品网站设计开发网站
  • 营销型手机网站建设网站关键词优化排名怎么做