牛客重新排列
wtcl
#include<bits/stdc++.h>
using namespace std;
int a[30]; // 存字符串对应的数字
string s="puleyaknoi";
string str;
int n;
int vis[55];
int len;
//判断一个区间内是否有了目标字符串
int check()
{
for(int i=0;i<10;i++)
{
if(vis[a[i]])
{
//如果遇到一个数为0就会直接返回0值所以不用计数判断是否遇到目标字符串
}
else
return 0;
}
return 1;
}
int main()
{
cin>>n;
for(int i=0;i<10;i++)
{
a[i]=s[i]-'a';
}
while(n--)
{
cin>>str;
int ans=100005;
memset(vis,0,sizeof(vis));
int len=str.length();
int l=0;
for(int i=0;i<len;i++)
{
vis[str[i]-'a']++;
while(check()) // 如果进入循环就说明已经找到了字符串
{
//找优解
ans=min(ans,i-l+1); // sxpuleyaaknoip
// printf("ans = %d\n",ans);
vis[str[l]-'a']--; // 缩减头部 通过将第一个字符删除判断是否影响check函数
l++;
}
}
if(ans<=len)
cout<<ans<<endl;
else
cout<<"-1"<<endl;
}
return 0;
}