Codeforces 1321 C. Remove Adjacent(贪心枚举)

Codeforces 1321 C. Remove Adjacent(贪心枚举)_第1张图片

题意:

字符串中某一字符的前一位或者后一位的字符在字典序中比它小一,那么就可以删除这个字符,问最多能删除多少个字符。
要删最多,因为只有在相邻位置存在比它小1的时候才能删除,那么就要尽可能的不去破坏小的字符,因此要从最大开始删除。我们可以从z到b依次删除。然后删完一个字符,如果这个字符可以被删除我们就再遍历一遍看看删完的字符串是否还能继续被删除。

AC代码:

const int N = 4e5 + 10;
const int inf = 0x7ffffff;
int n, m;
string s, t;
int len;
bool flag;

int main()
{
    sd(n);
    cin >> s;
    for (int i = 25; i >= 0; i--)
    {
        t.clear();
        len = s.length();
        flag = 0;
        rep(j, 0, len - 1)
        {
            if (s[j] == 'a' + i && j > 0 && s[j - 1] == 'a' + i - 1)
            {
                flag = 1;
                continue;
            }
            else if (s[j] == 'a' + i && j < len - 1 && s[j + 1] == 'a' + i - 1)
            {
                flag = 1;
                continue;
            }
            t += s[j];
        }
        if (flag)
            i++;
        s = t;
    }
    int ans = n - s.length();
    pd(ans);
    return 0;
}

你可能感兴趣的:(贪心,CodeForces)