CF1321C Remove Adjacent
题目描述
给定一个只包含小写拉丁字母的字符串 $s$,其长度为 $|s|$。你可以对该字符串进行若干次操作。
每次操作时,你可以选择某个下标 $i$,并移除 $s$ 的第 $i$ 个字符(记为 $s_i$),前提是它的至少一个相邻字符是 $s_i$ 在拉丁字母表中的前一个字母。例如,字母 b 的前一个字母是 a,字母 s 的前一个字母是 r,字母 a 没有前一个字母。注意,每次移除后,字符串的长度会减少 1。因此,每次操作时下标 $i$ 都应满足 $1 \le i \le |s|$。
对于字符 $s_i$,其相邻字符为 $s_{i-1}$ 和 $s_{i+1}$。字符串的第一个和最后一个字符只有一个相邻字符(除非 $|s|=1$)。
举例如下,设 $s=$ bacabcab。
1. 第一步,你可以移除第一个字符 $s_1=$ b,因为 $s_2=$ a。此时字符串变为 $s=$ acabcab。
2. 第二步,你可以移除第五个字符 $s_5=$ c,因为 $s_4=$ b。此时字符串变为 $s=$ acabab。
3. 第三步,你可以移除第六个字符 $s_6=$ b,因为 $s_5=$ a。此时字符串变为 $s=$ acaba。
4. 第四步,你只能移除第四个字符 $s_4=$ b,因为 $s_3=$ a(或 $s_5=$ a)。此时字符串变为 $s=$ acaa,无法再进行操作。
你的任务是,若每次操作都选择最优方案,求最多可以移除多少个字符。
输入格式
第一行输入一个整数 $|s|$($1 \le |s| \le 100$),表示字符串 $s$ 的长度。
第二行输入一个长度为 $|s|$ 的字符串 $s$,仅包含小写拉丁字母。
输出格式
输出一个整数,表示在最优操作方案下,最多可以移除的字符数。
说明/提示
第一个样例已在题目描述中给出。注意,题目中给出的操作顺序不是唯一的,但可以证明该测试的最大答案为 $4$。
在第二个样例中,你可以将 $s$ 的所有字符都移除,只剩下一个字符。具体操作如下:
1. 第一步,移除第三个字符 $s_3=$ d,$s$ 变为 bca。
2. 第二步,移除第二个字符 $s_2=$ c,$s$ 变为 ba。
3. 第三步,移除第一个字符 $s_1=$ b,$s$ 变为 a。
由 ChatGPT 4.1 翻译