字符串——尺取
字符串
https://ac.nowcoder.com/acm/problem/18386
运用双指针,如果不符合条件,将第二个指针向右移,符合条件后,再把第一个指针向右移,直到刚好满足,这样记录每次刚好符合条件的字串长度,遍历完后取最小值。
#include<iostream> #include<algorithm> #include<string> using namespace std; int a[27]; bool check() { bool flag=true; for(int i=0;i<26;i++) { if(a[i]==0) { flag=false; break; } } return flag; } int main() { int minl=1e6,sum=0; string s; int cnt=0; cin>>s; char *p1=&s[0],*p2=&s[0]; while(p2<&s[s.size()]) { while(!check()) { if(p2==&s[s.size()]) goto out; a[*p2-'a']++; p2++; } while(check()) { a[*p1-'a']--; p1++; } sum=p2-p1+1; minl=min(minl,sum); } out: cout<<minl<<endl; getchar(); getchar(); }