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

力扣 hot100 最小覆盖子串 滑动窗口 字符计数

👨‍🏫 题目地址

在这里插入图片描述

🍻 AC code

class Solution {
    public String minWindow(String s, String t)
	{
		int n = s.length();
		int m = t.length();
		if (n < m)
			return "";

		char[] tt = t.toCharArray();
		int[] cnt = new int[128];// 字符计数数组
		for (int i = 0; i < m; i++)
			cnt[tt[i]]++;// 统计t串的字符

		int l = 0, r = 0;
		int left = 0, right = 0, ans = Integer.MAX_VALUE;
		while (r < n)
		{
			System.out.println(m);
			char c = s.charAt(r++);
			if (cnt[c] > 0)// 在 t串 中出现过的字符才减,减到 0 即止
				m--;
			cnt[c]--;// 当前子串 抵消 t串 的字符统计
			while (m == 0)// 当前子串完全覆盖完 t 串
			{
				if (r - l < ans)// 更新答案
				{
					ans = r - l;
					left = l;
					right = r;
				}
				c = s.charAt(l++);// 子串左边界右移
				// cnt[c] == 0 : 字符c是 t 串的。如果不是t串的,cnt[c] 为负值
				if (cnt[c] == 0)
					m++;
				cnt[c]++;// 取消对当前字符的统计
			}
		}
		if (ans == Integer.MAX_VALUE)
			return "";
		else
			return s.substring(left, right);
	}
}

👨‍🏫 参考题解


http://www.kler.cn/a/148017.html

相关文章:

  • 【2024软考架构案例题】你知道 Es 的几种分词器吗?Standard、Simple、WhiteSpace、Keyword 四种分词器你知道吗?
  • 贪心算法day03(最长递增序列问题)
  • 如何使用ffmpeg命令行进行录屏
  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • 解决 Redis 报错:`(error) NOAUTH Authentication required`
  • rockylinux 8安装 gcc11.2
  • 【沁恒蓝牙mesh】CH58x 将RTC时钟切换为LSE外部低速时钟
  • 中年人怎么发展?持续发展?
  • 牛客 算法 HJ103 Redraiment的走法 golang语言实现
  • 【brpc学习实践九】mbvar及bvar可观测
  • Web语言基础课程期末代做
  • 【git】pip install git+https://github.com/xxx/xxx替换成本地下载编译安装解决网络超时问题
  • 【开源】基于Vue和SpringBoot的企业项目合同信息系统
  • 【实验】配置用户通过IPv6方式上网
  • uni-app图片上传
  • idea打开.class文件没有反编译
  • “SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用
  • Redis 面试题——持久化
  • Leetcode 2939. Maximum Xor Product
  • 问答知识库快速构建技术解析及行业实践
  • springsecurity6配置三
  • [Java][单列集合+数组遍历方法]通过Lambda表达式简化匿名内部类遍历数组学习体会
  • Python常见基础数据结构
  • 门店管理系统小程序作用是什么
  • 【git】工作中常用的命令
  • linux复习笔记05(小滴课堂)