zoukankan      html  css  js  c++  java
  • HDU 2369 Broken Keyboard(字符串)

    点我看题目

    题意 : 这个人的键盘坏了,最多只能按n个键,给你一串字符串,问你找一个最长的字串,这个字串中包含的不同的字母不能超过n个。

    思路 : 比赛的时候脑子没转过来,一直没模拟出来,都不知道怎么弄出来。。。。。就是我用的是队列,往队列里放就行,不过其实不用那么麻烦,直接往那个数组里放,然后指针移动的时候要注意别出错,基本上问题不大,我还因为数组开小了WA了一次。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    
    using namespace std;
    char ch[1000010] ;
    int chh[501] ;
    
    int main()
    {
        int n ;
    
        while(~scanf("%d",&n))
        {
            if(n == 0) break ;
            getchar() ;
            queue<int>q ;
            gets(ch) ;
            int len = strlen(ch) ;
            int k = 0,maxx = 0 ;
            memset(chh,0,sizeof(chh)) ;
            for(int i = 0 ; 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] == 1)
                        k-- ;
                    chh[c]-- ;
                }
                c = q.size()  ;
                maxx = max(maxx,c) ;
            }
            printf("%d
    ",maxx) ;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Linux Shell常用技巧(二)
    Linux Shell常用技巧(一)
    Linux Shell常用命令总结
    不大于N的所有素数
    include指令
    PotPlayer 进度条显示缩略图
    PotPlayer 禁止更新
    a标签添加点击事件
    配置JDK环境变量
    电路交换与分组交换的差别
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3630512.html
Copyright © 2011-2022 走看看