C. K-Dominant Character

给出一个字母串,k满足:长度至少为k的字串一定包含某字母c,求最小的k

一个数组记录每个字母上一次出现的位置,用来计算另一个数组:记录每个字母与其相邻的相同字母的最大距离(设0和len两个位置一定有相同的字母),答案就是这个数组中的最小值啦~

    me(flag, 0);
    scanf("%s", s + 1);
    n = strlen(s + 1);
    For(i, 1, n)
    {
        if (!flag[s[i]])
        {
            lk[s[i]] = i;
            q.push(s[i]);
            flag[s[i]] = 1;
            len[s[i]] = i;
        }
        else
        {
            chkmax(len[s[i]], i - lk[s[i]]);
            lk[s[i]] = i;
        }
    }

    while(!q.empty()){
        int x = q.front();
        q.pop();
        chkmin(ans, max(len[x],n+1-lk[x]));
    }
    cout << ans;

 

posted @ 2018-08-06 03:31  planche  阅读(251)  评论(0编辑  收藏  举报