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

基于工作过程的商务网站建设 网页制作百度指数快刷软件

基于工作过程的商务网站建设 网页制作,百度指数快刷软件,网站建设的实训总结,网站建设的项目方案模板给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s “cbaebabacd”, p “abc” 输出: [0,6] 解释: 起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。 起始索引等于…

给定两个字符串 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 ∗ 10 4 3 * 10^4 3104
s 和 p 仅包含小写字母


知识点:
定长滑动窗口、数组、字符串


解:
这道题有多种实现方式:①定长滑动窗口;②不定长滑动窗口。这里实现的是①定长滑动窗口。
核心思想是:统计字符的出现次数,若s的子串、p中的所有字符的出现次数相同,则当前滑动窗口内的子串是异位词。

首先,获取两个字符串长度,提高后续代码的可读性。

然后,这里定义了两个数组,分别存储字符串s、p中各个字符的出现次数,因此数组大小分别是26,记录所有字母(26个)。使用数组而不是前面题目使用的HashMap,因为要对元素在或不在Map中进行分类讨论,没有数组的操作简单便利。

接着,若字符串s的长度<字符串p的长度,则必不存在异位词,因为无法从s中找到一个比自身还长的子串。

然后,遍历p的每个字符,统计各个字符的出现次数:cntP[p.charAt(i) - 'a']++;

然后,遍历s的每个字符,这里用滑动窗口右边界,控制滑动窗口的内容。这里的核心思路是:
获取当前滑动窗口的左边界,用start表示。因为是定长,所以右边界end-n+1即为左边界的下标。
若左边界<0,表示此时尚未开始判断,即,滑动窗口还没到达指定大小
对于新加入滑动窗口的元素(右边界指向的元素),将数组中对应字符的出现次数+1
判断此时两个数组是否相等。若相等,表明当前滑动窗口内的子串、p中各个字符的出现次数是相同的,因此当前滑动窗口内的子串就是异位词。
更新滑动窗口,对于离开滑动窗口的元素(左边界指向的元素),将数组中对应字符的出现次数-1

时间复杂度:O(∣Σ∣m)。Arrays.equals()时间复杂度是O(∣Σ∣),总共遍历m个元素。
空间复杂度:O(∣Σ∣)。因为两个数组各存储了26个字母
∣Σ∣=包含的字符的数量

class Solution {public List<Integer> findAnagrams(String s, String p) {//核心:定长滑动窗口,统计字母的出现次数,若s、p的字母出现次数相同,则是异位词List<Integer> res = new ArrayList<>();//获取字符串s、p的长度int m = s.length();int n = p.length();//定义数组,存储字符的出现次数(比HashMap的操作更方便)int[] cntS = new int[26];int[] cntP = new int[26];//特殊情况判断,直接返回空列表if (m < n)return res;//统计p的每个字符的出现次数for (int i = 0; i < n; i++) {cntP[p.charAt(i) - 'a']++;}//用滑动窗口右边界控制子串for (int end = 0; end < m; end++) {//获取滑动窗口左边界int start = end - n + 1;//新加入滑动窗口的元素(end指向的元素):出现次数+1cntS[s.charAt(end) - 'a']++;//若左边界<0,表示此时还没到开始判断的时候if (start < 0) {continue;}//判断s子串、p的每个字符出现次数是否相等,若相等表示当前滑动窗口内的子串是异位词if (Arrays.equals(cntS, cntP)) {res.add(start);//将异位词的起始下标加入结果列表}//更新滑动窗口,离开滑动窗口的元素(start指向的元素):出现次数-1cntS[s.charAt(start) - 'a']--;}return res;}
}

参考:
1、灵神解析

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

相关文章:

  • 做电商卖玉器的网站百度知道首页登录入口
  • 武汉网站推广霸屏网络市场调研的方法
  • 网页制作基础知识答案图片优化是什么意思
  • 北京房山网站建设产品更新培训正规网络推广服务
  • 本地的上海网站建设公司网站域名查询官网
  • 做b2b比较好的网站有哪些重庆关键词优化
  • 免费搭建网站的平台深圳谷歌seo推广
  • 免费行情软件网站下载大全安全吗百度指数查询官方网
  • 企业官网建站费用成品短视频网站源码搭建
  • 哪个网站做新中式株洲seo排名
  • DW做网站下拉列表怎么做网络推广代理平台
  • 企业网站后台管理系统一级域名生成二级域名
  • 外资企业可以在中国境内做网站吗网络推广软件
  • 自己做的网站如何上百度凌哥seo技术博客
  • 英文公司网站建设seo网络优化公司
  • cms开发网seo网站排名厂商定制
  • 做百度联盟做什么类型网站公司官网优化方案
  • 网站建设过程中要怎么打开速度安卓优化大师手机版
  • 甘肃省通信管理局网站寻找客户的渠道和方法
  • 网站建设分为哪几个阶段链接提交
  • 苏州seo培训多少钱google seo 优化招聘
  • 万州微网站建设免费企业网站建设流程
  • asp动态网站建设网络营销就业方向和前景
  • 网站开发 视频存储百度下载电脑版
  • 做外贸的网站简称为什么网站深圳外贸网络推广
  • 手机网站分辨率做多大智能建站abc
  • 不同代码做的网站后期维护情况大数据营销专业
  • 无锡公司网站建设服务济南优化网页
  • 怎么根据已有网站做新网站海外网站
  • 怎么样才能建立网站平台百度一下你知道