ACM模版

描述

题解

尺取法,复杂度O(n)。

代码

#include <iostream>
#include <string>

using namespace std;

const int INF = 0x3f3f3f3f;

int flag[27] = {
  0};
string S;

int main(int argc, const char * argv[])
{
    cin >> S;

    int ans = INF;
    int num = 0;
    int left = 0, right = 0;
    for (; right < S.length(); right++)
    {
        if (flag[S[right] - 'A'] == 0)
        {
            num++;
        }
        flag[S[right] - 'A']++;
        while (flag[S[left] - 'A'] > 1)
        {
            flag[S[left] - 'A']--;
            left++;
        }
        if (num == 26)
        {
            ans = ans > right - left + 1 ? right - left + 1 : ans;
        }
    }

    if (ans == INF)
    {
        cout << "No Solution" << '\n';
        return 0;
    }
    std::cout << ans << '\n';

    return 0;
}