LeetCode-076-最小覆盖子串

思路
使用滑动窗口解决该问题
这里简单地介绍一下什么叫做滑动窗口理论
就是用一个可以滑动的窗口,该窗口有2个指针,来表示窗口范围,然后先用右指针来满足条件,然后用左指针来缩小答案范围。
代码
class Solution {
public String minWindow(String s, String t) {
String res="";
int len1=s.length(),len2=t.length();
//conut表示当前覆盖的子串长度,min表示最小长度
int left=0,right=0,count=0,min=Integer.MAX_VALUE;
//滑动窗口数组用于记录当前子串字母个数
int []wins=new int[128];
//need数组记录所需子串字母个数
int []need=new int[128];
for(int i=0;i<len2;i++){
need[t.charAt(i)]++;
}
while(right<len1){
char ch1=s.charAt(right);
wins[ch1]++;
if(need[ch1]>0&&wins[ch1]<=need[ch1]) count++;
//找到覆盖子串
while(count==len2){
if((right-left+1) < min) {
min=right-left+1;
res=s.substring(left, right+1);
}
//尝试缩短
char ch2=s.charAt(left);
if(wins[ch2]>0&&wins[ch2]<=need[ch2]) count--;
wins[ch2]--;
left++;
}
right++;
}
return res;
}
}
本文介绍了一种使用滑动窗口的方法来解决LeetCode上的第076题——最小覆盖子串的问题。通过两个指针定义窗口范围,首先利用右指针扩大窗口直至满足条件,再用左指针缩小窗口来寻找最短符合条件的子串。
723

被折叠的 条评论
为什么被折叠?



