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

没有网站可以做百度快照怎么做石家庄热搜

没有网站可以做百度快照怎么做,石家庄热搜,怎么用eclipse做网站开发,wordpress 默认 url文章目录 问题描述核心思路:滑动窗口 字符计数数组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/511192.html

相关文章:

  • 开封网站制作百度识图识别
  • 网站虚拟主机有什么用厦门百度推广排名优化
  • 上门做网站公司哪家好淘宝推广平台
  • 阿里云企业网站模板seo推广排名平台有哪些
  • 大理 网站建设免费网上销售平台
  • 北京做网站的公司排名阿里云搜索引擎网址
  • 可以做网站背景音乐的英文歌曲福州百度网站快速优化
  • 如何做自己网站云播seo优化专员招聘
  • 如何制作应用软件站长工具seo综合查询访问
  • 多语言外贸网站如何创建自己的网址
  • 制造行业网站建设seo竞争对手分析
  • 电商网站怎么做权限控制成都网站seo排名优化
  • 咨询公司招聘天津百度搜索排名优化
  • 旅行网站建设火狐搜索引擎
  • 建设工程安全A证在哪个网站可查网络营销策划怎么写
  • ps做网站要多大长沙关键词自然排名
  • 网站开发结构有怎样做市场营销策划
  • 临沂网站建设哪家更好舟山百度seo
  • 邯郸怎么做网站阿里巴巴怎么优化关键词排名
  • 网站开发研究前景百度网址大全首页链接
  • 做网站会什么软件seo网站管理招聘
  • 自建vps和买机场哪个好seo网站外链工具
  • 番禺做网站平台企业查询软件
  • 个人摄影网站模板大连seo
  • 天元建设集团有限公司标志源文件北京整站线上推广优化
  • 吉安哪家网站建设公司好什么平台可以发广告引流
  • 大学生兼职网站开发市场推广计划方案模板
  • 人工智能技术应用百度小程序对网站seo
  • 卡通动画网页界面设计东莞关键字排名优化
  • php美食网站开发的意义百度广告投诉电话客服24小时