思路:求解固定区间最大最小问题,一般都是滑窗
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
char s[maxn];
map<char,int>vis;
int main()
{
scanf("%s",s+1);
int ans = 1e9;
int len = strlen(s+1);
int num = 0;
int l=1,r = 1;
while(r<=len)
{
vis[s[r]]++;
if(vis[s[r]]==1)num++;
while(num==26)
{
ans = min(ans,r-l+1);
vis[s[l]]--;
if(vis[s[l]]==0)
num--;
l++;
}
r++;
}
if(ans==1e9)printf("No Solution\n");
else printf("%d\n",ans);
}
基准时间限制:1 秒 空间限制:131072 KB 分值: 20
难度:3级算法题
给出一个字符串,求该字符串的一个子串S,S包含A-Z中的全部字母,并且S是所有符合条件的子串中最短的,输出S的长度。如果给出的字符串中并不包括A-Z中的全部字母,则输出No Solution。
Input
第1行,1个字符串。字符串的长度 <= 100000。
Output
输出包含A-Z的最短子串长度。如果没有符合条件的子串,则输出No Solution。
Input示例
BVCABCDEFFGHIJKLMMNOPQRSTUVWXZYZZ
Output示例
28