题意 : 这个人的键盘坏了,最多只能按n个键,给你一串字符串,问你找一个最长的字串,这个字串中包含的不同的字母不能超过n个。
思路 : 比赛的时候脑子没转过来,一直没模拟出来,都不知道怎么弄出来。。。。。就是我用的是队列,往队列里放就行,不过其实不用那么麻烦,直接往那个数组里放,然后指针移动的时候要注意别出错,基本上问题不大,我还因为数组开小了WA了一次。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue> using namespace std;
char ch[] ;
int chh[] ; int main()
{
int n ; while(~scanf("%d",&n))
{
if(n == ) break ;
getchar() ;
queue<int>q ;
gets(ch) ;
int len = strlen(ch) ;
int k = ,maxx = ;
memset(chh,,sizeof(chh)) ;
for(int i = ; i < len ; i++)
{
int c = ch[i] ;
q.push(c) ;
if(!chh[c])
k++ ;
chh[c] ++ ;
while(k > n)
{
c = q.front() ;
q.pop() ;
if(chh[c] == )
k-- ;
chh[c]-- ;
}
c = q.size() ;
maxx = max(maxx,c) ;
}
printf("%d\n",maxx) ;
}
return ;
}