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

辽宁建设厅官方网站html5加入wordpress

辽宁建设厅官方网站,html5加入wordpress,网站质量度,郑州电子商务网站建设在字符串处理问题中,有一类经典问题是寻找满足特定条件的最小子串。今天我们来讨论一个典型的问题:最小覆盖子串。这个问题不仅考察了我们对字符串的处理能力,还涉及滑动窗口这一重要的算法思想。 问题描述 给定两个字符串 s 和 t&#xff0…

在字符串处理问题中,有一类经典问题是寻找满足特定条件的最小子串。今天我们来讨论一个典型的问题:最小覆盖子串。这个问题不仅考察了我们对字符串的处理能力,还涉及滑动窗口这一重要的算法思想。


问题描述

给定两个字符串 s 和 t,要求找到 s 中包含 t 所有字符的最短子串。如果 s 中不存在这样的子串,返回空字符串 ""

示例

  • 示例 1

    • 输入:s = "ADOBECODEBANC"t = "ABC"

    • 输出:"BANC"

    • 解释:"BANC" 是 s 中包含 t 所有字符的最短子串。

  • 示例 2

    • 输入:s = "a"t = "a"

    • 输出:"a"

    • 解释:整个字符串 s 就是最短子串。

  • 示例 3

    • 输入:s = "a"t = "aa"

    • 输出:""

    • 解释:t 中有两个 'a',但 s 中只有一个 'a',无法满足条件。


解题思路

1. 滑动窗口

滑动窗口是一种经典的算法思想,特别适合处理子串或子数组问题。它的核心思想是通过维护一个窗口(通常用两个指针表示),在满足条件的情况下不断调整窗口的大小,从而找到最优解。

2. 具体步骤

  1. 统计字符频率

    • 使用一个哈希表(或数组)统计 t 中每个字符的出现次数。

    • 例如,t = "ABC",则哈希表为 {A:1, B:1, C:1}

  2. 滑动窗口

    • 使用两个指针 left 和 right 表示窗口的左右边界。

    • 右指针 right 向右移动,扩展窗口,直到窗口包含 t 的所有字符。

    • 左指针 left 向右移动,收缩窗口,尝试找到更小的满足条件的子串。

  3. 记录结果

    • 在滑动窗口的过程中,记录满足条件的最短子串的起始位置和长度。


代码实现

以下是基于滑动窗口的 Java 实现:

import java.util.HashMap;
import java.util.Map;class Solution {public String minWindow(String s, String t) {// 统计 t 中字符的频率Map<Character, Integer> targetMap = new HashMap<>();for (char c : t.toCharArray()) {targetMap.put(c, targetMap.getOrDefault(c, 0) + 1);}// 滑动窗口的字符频率Map<Character, Integer> windowMap = new HashMap<>();int left = 0; // 窗口左边界int minLen = Integer.MAX_VALUE; // 最小子串长度int start = 0; // 最小子串的起始位置int count = 0; // 记录窗口中满足 t 字符条件的字符数量for (int right = 0; right < s.length(); right++) {char currentChar = s.charAt(right);// 更新窗口字符频率windowMap.put(currentChar, windowMap.getOrDefault(currentChar, 0) + 1);// 如果当前字符是 t 中的字符,并且窗口中的数量达到了 t 中的要求,则 count++if (targetMap.containsKey(currentChar) && windowMap.get(currentChar).equals(targetMap.get(currentChar))) {count++;}// 当窗口满足 t 的所有字符条件时,尝试收缩窗口while (count == targetMap.size()) {// 更新最小子串if (right - left + 1 < minLen) {minLen = right - left + 1;start = left;}// 移动左边界,收缩窗口char leftChar = s.charAt(left);windowMap.put(leftChar, windowMap.get(leftChar) - 1);// 如果左边界字符是 t 中的字符,并且窗口中的数量不再满足 t 的要求,则 count--if (targetMap.containsKey(leftChar) && windowMap.get(leftChar) < targetMap.get(leftChar)) {count--;}left++;}}// 返回最小子串return minLen == Integer.MAX_VALUE ? "" : s.substring(start, start + minLen);}
}

代码解析

  1. 统计字符频率

    • 使用 targetMap 统计 t 中每个字符的出现次数。

  2. 滑动窗口

    • 使用 windowMap 记录当前窗口中每个字符的出现次数。

    • 右指针 right 向右移动,扩展窗口。

    • 当窗口满足 t 的所有字符条件时,尝试收缩窗口(移动左指针 left)。

  3. 更新最小子串

    • 在窗口满足条件时,记录当前窗口的长度和起始位置。

    • 如果找到更小的窗口,则更新最小子串。

  4. 返回结果

    • 如果找到满足条件的最小子串,则返回该子串;否则返回空字符串。


复杂度分析

  • 时间复杂度O(m + n),其中 m 是 s 的长度,n 是 t 的长度。滑动窗口的左右指针最多各遍历一次 s

  • 空间复杂度O(m + n),用于存储 targetMap 和 windowMap


总结

最小覆盖子串问题是一个经典的滑动窗口问题。通过维护一个窗口,我们可以高效地找到满足条件的最小子串。滑动窗口的思想不仅适用于字符串问题,还可以用于数组、链表等其他数据结构的问题。希望这篇博客能帮助你更好地理解滑动窗口算法,并掌握解决类似问题的技巧!

如果你有任何问题或建议,欢迎在评论区留言!


文章转载自:

http://RembJ8As.fqpyj.cn
http://9Th55rWX.fqpyj.cn
http://KZHkwe6i.fqpyj.cn
http://BvEdiK7k.fqpyj.cn
http://7jmBD5Wf.fqpyj.cn
http://OjRcaf49.fqpyj.cn
http://28RIbxZF.fqpyj.cn
http://hZ1WZBQc.fqpyj.cn
http://WcrDzhCa.fqpyj.cn
http://9aAL8R70.fqpyj.cn
http://oiN1rfLA.fqpyj.cn
http://7fhCytiE.fqpyj.cn
http://jeM0HxWe.fqpyj.cn
http://wJ1sWkv5.fqpyj.cn
http://P6odNLMJ.fqpyj.cn
http://8BM4Xd38.fqpyj.cn
http://EqRHFZFl.fqpyj.cn
http://Im1I9Auw.fqpyj.cn
http://sutNt2pj.fqpyj.cn
http://P10xoLDE.fqpyj.cn
http://75lCNxPP.fqpyj.cn
http://e8qeW69h.fqpyj.cn
http://WOs88Iic.fqpyj.cn
http://nj4rcuWB.fqpyj.cn
http://XZByW3gW.fqpyj.cn
http://oblPWNTl.fqpyj.cn
http://LK8joMdu.fqpyj.cn
http://gV3DYKTK.fqpyj.cn
http://QQj4o8Wb.fqpyj.cn
http://uuXbG4NA.fqpyj.cn
http://www.dtcms.com/wzjs/605494.html

相关文章:

  • 福州企业网站建站模板山东电力建设网站
  • 怎么做新网站才能被百度收录湖州公司网站建设
  • 织梦dedecms资讯文章类网站模板企业邮箱地址格式
  • 企业网站开发使用方法window wordpress搭建
  • 二级域名做网站域名wordpress自动存图
  • 网站建设类合同范本家电企业网站模板
  • 重庆綦江网站制作公司哪家专业项目管理软件 开源
  • 网站权重传递网站建设客户沟通
  • 东莞公司网站广告联盟网站建设
  • 纯静态网站索引怎么做网站建设能解决哪些问题
  • 推荐几个做网页设计的网站大兴企业官网网站建设
  • 岳阳网站建设与设计中国品牌网站
  • dedecms 网站安装搜狗推广登陆
  • 做网站的竞品分析网站备案链接直接查看
  • 网站开发组合网站如何进行内外营销运营
  • 网站优化qq群优秀网站建设官网
  • 建设银行个人网站个人客户最常用的规划网站
  • 人力招聘网站建设的简要任务执行书电影网站怎么做推广
  • 利津网站建设wordpress 本机安装
  • 1网站免费建站免备案域名解析
  • 成都最专业做网站的关键词查网址
  • 移动端网站制作模板石家庄网站建设哪家专业
  • jsp网站开发面试题手机访问不了自己做的网站吗
  • 毛概课程网站建设seo网站推广策略
  • 可以做动感影集的网站寻找集团网站建设
  • 网站后台 生成所有页面网站开发要用到什么
  • 做网站还需要买空间吗wordpress下载的主题怎么用
  • 紫川网站建设企业网站功能对比分析
  • 如何分析网站的设计网站建设学什么语言
  • 毕业设计做app还是做网站大型网站系统解决方案