题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1127
题解:
尺取。自己用的deque(尺取和滑动窗口都能用)
代码:
#include <map>
#include <cmath>
#include <vector>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
const int maxn = 1e5+10;
map<char,int>mp;
char s[maxn];
int main()
{
while(scanf("%s",s)!=EOF)
{
mp.clear();
int len=(int)strlen(s);
deque<char>q;
int cnt=0;
int MIN=inf;
for(int i=0;i<len;i++)
{
q.push_back(s[i]);
if(!mp[s[i]])
cnt++;
mp[s[i]]++;
if(cnt>=26)
{
while(q.size()>0)
{
char c=q.front();
if(mp[c]==1)
break;
else
{
q.pop_front();
mp[c]--;
}
}
MIN=min(MIN,(int)q.size());
}
}
if(MIN==inf)
printf("No Solution\n");
else
printf("%d\n",MIN);
}
}