CF1321C.Remove Adjacent

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个只包含小写拉丁字母的字符串 ss,其长度为 ∣s∣|s|。你可以对该字符串进行若干次操作。

每次操作时,你可以选择某个下标 ii,并移除 ss 的第 ii 个字符(记为 sis_i),前提是它的至少一个相邻字符是 sis_i 在拉丁字母表中的前一个字母。例如,字母 b 的前一个字母是 a,字母 s 的前一个字母是 r,字母 a 没有前一个字母。注意,每次移除后,字符串的长度会减少 1。因此,每次操作时下标 ii 都应满足 1≤i≤∣s∣1 \le i \le |s|。

对于字符 sis_i,其相邻字符为 si−1s_{i-1} 和 si+1s_{i+1}。字符串的第一个和最后一个字符只有一个相邻字符(除非 ∣s∣=1|s|=1)。

举例如下,设 s=s= bacabcab。

  1. 第一步,你可以移除第一个字符 s1=s_1= b,因为 s2=s_2= a。此时字符串变为 s=s= acabcab。
  2. 第二步,你可以移除第五个字符 s5=s_5= c,因为 s4=s_4= b。此时字符串变为 s=s= acabab。
  3. 第三步,你可以移除第六个字符 s6=s_6= b,因为 s5=s_5= a。此时字符串变为 s=s= acaba。
  4. 第四步,你只能移除第四个字符 s4=s_4= b,因为 s3=s_3= a(或 s5=s_5= a)。此时字符串变为 s=s= acaa,无法再进行操作。

你的任务是,若每次操作都选择最优方案,求最多可以移除多少个字符。

输入格式

第一行输入一个整数 ∣s∣|s|(1≤∣s∣≤1001 \le |s| \le 100),表示字符串 ss 的长度。

第二行输入一个长度为 ∣s∣|s| 的字符串 ss,仅包含小写拉丁字母。

输出格式

输出一个整数,表示在最优操作方案下,最多可以移除的字符数。

输入输出样例

  • 输入#1

    8
    bacabcab

    输出#1

    4
  • 输入#2

    4
    bcda

    输出#2

    3
  • 输入#3

    6
    abbbbb

    输出#3

    5

说明/提示

第一个样例已在题目描述中给出。注意,题目中给出的操作顺序不是唯一的,但可以证明该测试的最大答案为 44。

在第二个样例中,你可以将 ss 的所有字符都移除,只剩下一个字符。具体操作如下:

  1. 第一步,移除第三个字符 s3=s_3= d,ss 变为 bca。
  2. 第二步,移除第二个字符 s2=s_2= c,ss 变为 ba。
  3. 第三步,移除第一个字符 s1=s_1= b,ss 变为 a。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页