LeetCode:最小覆盖字串

java 复制代码
class Solution {
    public String minWindow(String s, String t) {
        if(s == null || s.length() == 0 || t == null || t.length() == 0){
            return "";
        }
        //存放t字符串中的字符个数
        int[] need = new int[128];
        //将t字符串存放进need数组中
        for(int i = 0; i < t.length(); i++){
            need[t.charAt(i)]++;
        }
        //左右指针
        int left = 0, right = 0;
        //记录t字符串的总长度
        int needCount = t.length();
        //记录最短字串的起始位置
        int minStart = 0;
        //记录最短字串的长度,先初始化
        int minLen = Integer.MAX_VALUE;

        while(right < s.length()){
            char c = s.charAt(right);
            //这个字符是所需要的就将字符串总长度-1
            if(need[c] > 0){
                needCount--;
            }
            need[c]--;
            
            if(needCount == 0){
                //清空后使用left指针进行多余字符的处理
                while(left < right && need[s.charAt(left)] < 0){
                    //将处理后的字符+1
                    need[s.charAt(left)]++;
                    left++;
                }
                //记录当前的最短窗口
                if(right - left + 1 < minLen){
                    minLen = right - left + 1;
                    minStart = left;
                }
                //将left当前所处的最前面的字符去掉,往后寻找是否存在更短字串
                need[s.charAt(left)]++;
                needCount++;
                left++;
            }
            right++;
        }
        //返回空串或者截取最短字串
        return minLen == Integer.MAX_VALUE ? "" : s.substring(minStart,minStart + minLen); 
    }
}

1.将字串t存放到数组中

2.使用right指针处理need数组和needCount计数器

3.得到第一个最小字串

4.处理字串中前方多余的字符

5.单个字母依次踢出最小字串中,往后寻找更优的字串

while (left < right && need[s.charAt(left)] < 0):存在need[s.charAt(left)] < 0这个条件left本身不会超过right,但是为了安全,加了left < right这层保障

相关推荐
小O的算法实验室2 小时前
2026年IEEE TEVC,面向农业多机器人任务分配的自适应多目标任务划分算法,深度解析+性能实测
算法·机器人·论文复现·智能算法·智能算法改进
禾小西2 小时前
性能测试后的瓶颈定位与调优:自下而上找问题,自上而下解难题
java·测试工具
Ujimatsu2 小时前
数据分析相关面试题-A/B 测试 & 统计学部分
算法·机器学习·数据分析
郝学胜-神的一滴2 小时前
Qt6 + OpenGL 3.3 渲染环境搭建全指南:从空白窗口到专属渲染画布的优雅实现
数据结构·c++·线性代数·算法·系统架构·图形渲染
LTphy2 小时前
P10909 [蓝桥杯 2024 国 B] 立定跳远
职场和发展·蓝桥杯
Omics Pro2 小时前
空间组学下一代机器学习与深度学习
大数据·人工智能·深度学习·算法·机器学习·语言模型·自然语言处理
建军啊2 小时前
java审计进阶
java·开发语言·python
2401_889626922 小时前
Java流程控制与方法全解析
java·开发语言
花千树-0102 小时前
5分钟用 Java 构建你的第一个 AI 应用
java·人工智能·spring boot·langchain·aigc·ai编程