题目链接:https://www.nowcoder.com/acm/contest/161/A
以每个字母为子串的开头对整个字符串扫一遍...
AC代码:
#include
using namespace std;
string str;
map ma;
int main()
{
cin>>str;
int len = str.length();
int ans = 0x3f3f3f3f,num = 0;
int r = 0,l = 0;
while(1){
while(r < len && num < 26){
if(ma[str[r]] == 0) num ++;
ma[str[r]] ++;
r ++;
}
if(num < 26) break;
ans = min(ans, r - l);
if(ma[str[l]]) ma[str[l]] --;
if(ma[str[l]] == 0) num--;
l ++;
}
printf("%d\n",ans);
return 0;
}