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

什么网站可以做PS 写论文兼职美国疫情最新数据消息

什么网站可以做PS 写论文兼职,美国疫情最新数据消息,专业做苗木的网站,wordpress链接跳转插件文章目录 问题描述核心思路:滑动窗口 字符计数数组1. 字符计数数组2. 滑动窗口 算法步骤完整代码实现复杂度分析关键点总结类似问题 问题描述 给定两个字符串 s 和 p,要求找到 s 中所有是 p 的**字母异位词(Anagram)**的子串的起…

文章目录

    • 问题描述
    • 核心思路:滑动窗口 + 字符计数数组
      • 1. 字符计数数组
      • 2. 滑动窗口
    • 算法步骤
    • 完整代码实现
    • 复杂度分析
    • 关键点总结
    • 类似问题

问题描述

给定两个字符串 sp,要求找到 s 中所有是 p 的**字母异位词(Anagram)**的子串的起始索引。
字母异位词是指由相同字母重新排列形成的字符串(包含相同的字母且每个字母出现的次数相同)。
例如:

  • 输入:s = "cbaebabacd", p = "abc"
    输出:[0, 6]
    解释:s 中从索引 0 开始的 "cba" 和索引 6 开始的 "bac" 均为 "abc" 的异位词。

核心思路:滑动窗口 + 字符计数数组

1. 字符计数数组

  • 核心思想:通过固定长度的数组(长度26,对应26个小写字母)记录字符串中每个字符的出现次数。
  • 比较机制:若两个字符串的字符计数数组相同,则它们是字母异位词。

2. 滑动窗口

  • 窗口初始化:在 s 中初始化一个长度为 p.length() 的窗口。
  • 窗口滑动:每次向右移动窗口,移除左边界字符的计数,增加右边界字符的计数。
  • 实时比较:每次滑动后检查当前窗口的计数数组是否与 p 的计数数组一致。

算法步骤

  1. 边界处理:若 s 的长度小于 pp 为空,直接返回空列表。
  2. 初始化计数数组
    • pCount:统计 p 中每个字符的出现次数。
    • sCount:统计 s 中初始窗口(前 p.length() 个字符)的出现次数。
  3. 初始窗口检查:若初始窗口的计数与 p 一致,记录索引 0
  4. 滑动窗口遍历
    • 窗口每次右移一位,更新左边界字符的计数(减少)和右边界字符的计数(增加)。
    • 每次更新后检查计数数组是否匹配,若匹配则记录当前窗口的起始索引。

完整代码实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> result = new ArrayList<>();int m = p.length();int n = s.length();// 边界条件处理if (m == 0 || n < m) {return result;}int[] pCount = new int[26]; // 记录p的字符计数int[] sCount = new int[26]; // 记录当前窗口的字符计数// 初始化p和s的初始窗口的字符计数for (int i = 0; i < m; i++) {pCount[p.charAt(i) - 'a']++;sCount[s.charAt(i) - 'a']++;}// 检查初始窗口是否匹配if (Arrays.equals(pCount, sCount)) {result.add(0);}// 滑动窗口:每次移动一位,更新sCount并检查for (int i = 1; i <= n - m; i++) {// 移除左边界字符的计数int leftChar = s.charAt(i - 1);sCount[leftChar - 'a']--;// 添加右边界字符的计数int rightChar = s.charAt(i + m - 1);sCount[rightChar - 'a']++;// 检查当前窗口是否匹配if (Arrays.equals(pCount, sCount)) {result.add(i);}}return result;}
}

复杂度分析

  • 时间复杂度O(n),其中 n 是字符串 s 的长度。
    滑动窗口遍历 s 需要 O(n),每次窗口操作(更新计数和比较)的时间为常数。
  • 空间复杂度O(1),使用固定长度的两个长度为26的数组。

关键点总结

  1. 字符计数数组:利用数组索引映射字符,快速统计字符出现次数。
  2. 滑动窗口优化:避免每次重新计算整个子串的计数,通过动态更新窗口边界字符的计数保证高效性。
  3. 边界处理:注意字符串长度不足时的直接返回逻辑。

类似问题

  • LeetCode 567. 字符串的排列:判断 s2 是否包含 s1 的排列。
  • LeetCode 76. 最小覆盖子串:寻找覆盖目标字符的最短子串。
http://www.dtcms.com/wzjs/473988.html

相关文章:

  • 给网站划分栏目老客外链
  • 有哪些做婚礼电子请柬的网站郑州制作网站公司
  • 网站的服务器怎么做的东莞网站设计公司排名
  • 建网站一定要备案吗随州今日头条新闻
  • 宝塔软件怎么做网站企业网站模板免费
  • 怎样做网站表白软文广告有哪些
  • 网站优化具体是怎么做的网页设计和网站制作
  • 多少钱可以做网站关键词优化排名软件推荐
  • xx市院门户网站建设方案怎样推广公司的网站
  • 洛阳数码大厦做网站的在几楼百度推广咨询
  • 可以免费建设网站吗如何快速推广自己的产品
  • 餐饮如何做网络推广上海网站营销seo方案
  • 一家专门做打折的网站网络运营
  • 网站的产品上传图片网站做外链平台有哪些
  • 帮人家做网站怎么赚钱网站排名查询工具
  • 做网站网站建设专业公司哪家好sem全称
  • 长寿网站建设乔拓云网微信小程序制作
  • 机械产品做那几个网站好发布平台
  • 成都住房和城乡建设部网站电商运营培训
  • 怎样做企业网站建设站长字体
  • 最新网站备案谷歌seo查询
  • 网站建设一般要提供什么内容打广告的免费软件
  • 用vue element-ui做的网站深圳网站优化公司
  • logo制作在线seo关键词排名优化如何
  • 济南网站的建设seochinazcom
  • 加强政府网站建设管理的重要性站长工具5g
  • 互联网非经营性网站icp备案系统网站安全检测
  • 英文版的wordpress能否改中文版seo网站关键词
  • 网站宣传的手段有哪些百度推广托管公司
  • 南京谁做免费网站腾讯网qq网站