zoukankan      html  css  js  c++  java
  • BestCoder Round #81 (div.2) 1004 String(动态规划)

    题目链接BestCoder Round #81 (div.2) 1003 String

    题意

    中文题,上有链接。就不贴了。

    思路

    枚举起点i,计算能够达到k个不同字母的最小下标j,则此时有子串len-j个。
    将全部起点的值加起来即是结果。

    代码

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    #define LL long long
    
    const int MOD = 1000000007;
    
    char str[1000009];
    int num[27];
    
    int get_cnt()
    {
        int cnt = 0;
        for(int i=0; i<26; i++)
            cnt += num[i]==0?0:1;
        return cnt;
    }
    
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            int k;
            memset(num, 0, sizeof(num));
            scanf("%s%d", str, &k);
            int len = strlen(str);
            LL ans = 0;
            int j = -1;
            bool flag = false;
            for(int i=0; i<len; i++)
            {
    
                while(get_cnt() < k)
                {
                    j++;
                    if(j == len)
                    {
                        flag = true;
                        break;
                    }
                    num[str[j]-'a']++;
                }
    
                if(flag)
                    break;
                ans += len-j;
                num[str[i]-'a']--;
            }
            printf("%lld
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    窗口设置背景图片
    双链表
    单链表
    Hough直线检测
    轮廓跟踪
    轮廓提取
    基于腐蚀的二值图像距离变换
    创建对话框用于交互
    hello world
    c#---params参数
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7265254.html
Copyright © 2011-2022 走看看