题意 给定一个字符串,问最短子序列能包含a到z字母
思路 尺取法,也叫双指针
j往后找 满足有26个字母的时候,i往前
#include<iostream>
using namespace std;
int a[30];
int check()
{
for(int i=1;i<=26;i++)
if(!a[i])return 1;
return 0;
}
int main()
{
int ans=1e9;
string s;
cin>>s;
for(int i=0,j=0;i<s.size();i++)
{
while(j<s.size()&&check())
{
a[s[j]-'a'+1]++;
j++;
}
if(!check())
ans=min(ans,j-i);
a[s[i]-'a'+1]--;
}
cout<<ans<<endl;
}
京公网安备 11010502036488号