ACM模版

题目

代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAXN = 26;
const int MAX_LEN = 1e3 + 10;

string str;
int num;
int b[MAXN];
int m[MAX_LEN];
int a[MAX_LEN][MAXN];

int dp(int i, int j, int a[])
{
    if (i == j)
    {
        return 0;
    }
    else if (i + 1 == j)
    {
        return a[j] - a[i] - 1;
    }
    else
    {
        return dp(i + 1, j - 1, a) + a[j] - a[i] - (j - i);
    }
}

int main()
{
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(m, 0, sizeof(m));

    cin >> str >> num;
    int length = (int)str.length();

    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < MAXN; j++)
        {
            a[i][str[i] - 'a'] = 1;
        }
    }

    for (int j = 0; j < MAXN; j++)
    {
        int k = 0;
        for (int i = 0; i < length; i++)
        {
            if (a[i][j] == 1)
            {
                m[k++] = i;
            }
        }

        if (k == 1)
        {
            b[j] = 1;
        }
        else
        {
            int temp = -1;
            for (int i = 0; i < k; i++)
            {
                for (int _i = i + 1; _i < k; _i++)
                {
                    if (dp(i, _i, m) <= num)
                    {
                        if ((_i - i) + 1 > temp)
                        {
                            temp = (_i - i) + 1;
                        }
                    }
                }
            }
            b[j] = temp;
        }

    }

    sort(b, b + MAXN);

    cout << b[MAXN - 1] << endl;

    return 0;
}