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

力扣-最小覆盖子串

76. 最小覆盖子串 - 力扣(LeetCode)

给定一个字符串s,和目标字符串t,需要找出s中包含t中所有字符且长度最小子串,输出这个子串

滑动窗口,初始时左右指针都指向s的第一个字符,对于每个遍历到的窗口,判断当前窗口是否包含了t中所需要的所有字符,不是的话就移动右指针,是的话就移动左指针。

怎么判断当前窗口是否包含了t中所需要的字符?

可以定义一个distance这样的int变量,当移动右指针后,如果此时右指针指向的字符在当前窗口中的个数严格小于t中所需要的个数,那么distance++。

在移动左指针前,如果此时左指针指向的字符在当前窗口中的个数等于t中所需要的个数,那么distance--。

distance等于t中所含字符数量时,就说明当前窗口是一个符合条件的子串

class Solution {
    public String minWindow(String s, String t) {
           int ans=1000000;
        String ansString="";
        int [] target=new int[200];
        int [] window=new int[200];

        int ansCount=0;
        for (int i = 0; i <t.length() ; i++) {
            target[t.charAt(i)]++;
            ansCount++;
        }

        int distance=0;
        for (int l=0,r=0; r <s.length() ; r++) {
            char x =s.charAt(r);

            if(window[x]<target[x]){
                distance++;
            }
            window[x]++;
            int f=0;
            while(distance==ansCount){
                f=1;
//                if(ans>r-l+1){
//                    ans =r-l+1;
//                    ansString=s.substring(l,r+1);
//                }
                if( window[s.charAt(l)]==target[s.charAt(l)]){
                    distance--;
                }
                window[s.charAt(l)]--;
                l++;
            }
            //出循环说明distance不满足anscount了

            if(f==1&&ans>r-l+2){
                f=0;
                ans =r-l+2;
                ansString=s.substring(l-1,r+1);
            }
        }
        return ansString;
    }
}


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

相关文章:

  • [机器学习]集成学习
  • 2024年10月HarmonyOS应用开发者基础认证全新题库
  • C++进阶-->多态(Polymorphism)
  • Java面向对象编程进阶(四)
  • Docker搭建基于Nextcloud的个人云盘/私有云盘/个人相册/家庭NAS
  • 如何将原本打开Edge呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面
  • uniapp vue3 开发华为鸿蒙HarmonyOS 一些报错bug和如何配置签名
  • 引入了窥视孔连接(peephole connections)的LSTM
  • 讯飞星火4.0 Turbo发布,国际14项主流测试集9项第一
  • AUTOSAR 规范中的设计模式:传感器执行器模式
  • 【数据结构 | PTA】懂蛇语
  • [ARM-2D 专题]5 MDK编译器一个旧版本-Ofast优化bug的问题及解决办法
  • 网页上视频没有提供下载权限怎么办?
  • 06回归与相关
  • 通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪
  • 基于C语言实现的UDP服务器
  • Spring Boot 经典九设计模式全览
  • Linux 命令行参数 环境变量
  • 自己动手给ESP8285 / ESP8266 1MB 编译新版AT 固件
  • 第二代支付系统报文交换标准【大额支付系统分册】(版本1.5.6)
  • 【笔记】复数基础复数相乘的物理意义:旋转+缩放
  • synchronized基本用法、原理?
  • 论文阅读 - Pre-trained Online Contrastive Learning for Insurance Fraud Detection
  • es实现自动补全
  • k8s_Pod健康检查
  • Mamba应用领域