字符串(尺取法)
字符串
https://ac.nowcoder.com/acm/problem/18386
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); }