题目大意:给出一个长度为n的字母串,求最短的包含母串中所有元素的最短字串的长度。
AC代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
using namespace std;
int main(){
int n,cnt,mmin,num;
string s,b,temp;
while(cin>>n>>s){
mmin = n;
num = 1;
cnt = 1;
b = s[0];
temp = s;
sort(temp.begin(),temp.end());
for(int i=1;i<n;++i) //统计字母种类数
if(temp[i] != temp[i-1]) cnt++;
for(int i=1;i<n;++i){
if(b.find(s[i]) == -1){
b += s[i];
num++;
if(num == cnt){
mmin = min(mmin,(int)b.size());
}
}
else{
b += s[i];
while(b.size() >= 2 && b.find(b[0],1) != -1){
b.erase(0,1);
}
if(num == cnt){
mmin = min(mmin,(int)b.size());
}
}
}
cout<<mmin<<endl;
}
return 0;
}