CODEFORCES ROUND #364 (DIV. 2) C

题目大意

暂无

题目解法

暂无

RTFC

#include <cstdio>
#include <cstring>
int n, types, l, r, tmp, ans;
char str[100000];
int cnt[56];
bool has[56];
inline int min(int aa, int bb) { return (aa < bb ? aa : bb); }
inline int ch2int(char ch)
{
    if (ch >= 'a')
        return ch - 'a' + 26;
    else
        return ch - 'A';
}
int main()
{
    ans = 1 << 30;
    scanf("%d%s", &n, str);
    for (int i = 0; i < n; i++)
    {
        tmp = ch2int(str[i]);
        if (!has[tmp])
            types++, has[tmp] = true;
    }
    memset(has, 0, sizeof(has));
    while (types)
    {
        tmp = ch2int(str[r]);
        if (!has[tmp])
            types--, has[tmp] = true;
        cnt[tmp]++;
        r++;
    }
    for (; l < r; l++)
        if (--cnt[ch2int(str[l])] == 0) break;
    cnt[ch2int(str[l])]++;
    ans = min(ans, r - l);
    while (r < n)
    {
        cnt[ch2int(str[r])]++;
        if (str[l] == str[r])
        {
            for (; l < r; l++)
                if (--cnt[ch2int(str[l])] == 0) break;
            cnt[ch2int(str[l])]++;
            ans = min(ans, r - l + 1);
        }
        r++;
    }
    printf("%d", ans);
    return 0;
}