https://ac.nowcoder.com/acm/problem/18386
题意:
给定一字符串s,找到其包含所有小写字母的最短子串。
分析:
枚举区间,首先想到尺取法。
尺取法:先初始化区间[0,-1],尺取移动右端点至区间[l,r]为合法区间,然后在满足条件的情况下不断向右移动左端点,缩小合法区间长度,更新ans最小值。尺取结束后答案即为ans。
代码:
#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
char a[1000005];
int b[30];
int ok(){
for(int i=0;i<26;i++){
if(b[i]==0){
return 0;
}
}
return 1;
}
int main()
{
scanf("%s",a);
int len=strlen(a);
int l=0,r=-1,ans=inf;
for(int i=0;i<len;i++){
r++;
b[a[i]-'a']++;
while(ok()){
ans=min(ans,r-l+1);
b[a[l]-'a']--;
l++;
}
}
printf("%d",ans);
}
京公网安备 11010502036488号