这题思想方法类似于Subsequence,可参考那题的题解理解。

单独写下本题和上述题目的不同注意点
最大区别在于字符串的处理
题目要求满足条件为:26个小写字母均存在

我就新开了一个整型数组来记录区间内相应每个小写字母的个数,用变量h来记录不同小写字母的个数
当此数组的一个值由0变为1,意味着多了一个不同的小写字母存在,故h++;当此数组值由1变为2或更大,意味着不同小写字母数量不变,但该对应小写字母数量增加。
所以后半段左指针移动时的反向考虑为:当数组一个值由1变为0,则h--;当数组值由2变为1或更大数变小,意味着h不变。

代码:
#include< iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
char a[1000010]={0};
int main()
{
int b[200]={0};
int m,i,n,s,k,l,j,h,p;
cin>>a;
n=strlen(a);
k=0;
l=n+1;
h=0;
for (j=0;j<=n-1;j++)
{
if (a[j]>=97&&a[j]<=122)
{
if (b[a[j]]==0){
h++;
b[a[j]]=1;
}
else b[a[j]]++;
}
if (h==26) {
l=min(j-k+1,l);
for (p=k;p<=j;p++)
{
b[a[p]]--;
if (b[a[p]]==0) h--;
if (h==26)
l=min(j-p,l);
else {
k=p+1;
break;
}
}
}
}
if (l==(n+1))
cout<<"0"<<endl;
else
cout<<l<<endl;
return 0;
}