借鉴了 nenu_xlp
的思想;
先把‘a’到‘a’+m-1的字符找到,在将其中的序号最大的减去最小的,在不断更新每个字母对应的序号,重复之前的步骤比较的出最小的结果。。
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> using namespace std; int t[27]; char s[1005]; int q[27]; int b,c; int show(int w) { int s=0; for(int i=1;i<=w;i++) { if(q[i]==0) return 1; } return 0; } int main() { int a,e,f,w,y; scanf("%d",&a); while(a--) { int len1=1005; memset(t,0,sizeof(t)); memset(q,-1,sizeof(q)); scanf("%d %d",&b,&c); int w=1,ans; scanf("%s",s); if(c>26||c<=0||b<c) {printf("I am so fat!\n");continue;} for(int i=0;i<b;i++) { int min1=1005,max1=-1; int p=0; e=s[i]-'a'+1; q[e]=i; for(int j=1;j<=c;j++) { if(q[j]!=-1) p++; } if(p!=c) continue; else { for(int j=1;j<=c;j++) { if(min1>q[j]) min1=q[j]; if(max1<q[j]) max1=q[j]; } } ans=max1-min1+1; if(len1>ans) len1=ans; } if(len1==1005) printf("I am so fat!\n"); else printf("%d\n",len1); } return 0; }
NBUT 1576 炒鸡想减肥的字符串
时间: 2024-10-10 11:40:15