CF1321C.Remove Adjacent
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个只包含小写拉丁字母的字符串 s,其长度为 ∣s∣。你可以对该字符串进行若干次操作。
每次操作时,你可以选择某个下标 i,并移除 s 的第 i 个字符(记为 si),前提是它的至少一个相邻字符是 si 在拉丁字母表中的前一个字母。例如,字母 b 的前一个字母是 a,字母 s 的前一个字母是 r,字母 a 没有前一个字母。注意,每次移除后,字符串的长度会减少 1。因此,每次操作时下标 i 都应满足 1≤i≤∣s∣。
对于字符 si,其相邻字符为 si−1 和 si+1。字符串的第一个和最后一个字符只有一个相邻字符(除非 ∣s∣=1)。
举例如下,设 s= bacabcab。
- 第一步,你可以移除第一个字符 s1= b,因为 s2= a。此时字符串变为 s= acabcab。
- 第二步,你可以移除第五个字符 s5= c,因为 s4= b。此时字符串变为 s= acabab。
- 第三步,你可以移除第六个字符 s6= b,因为 s5= a。此时字符串变为 s= acaba。
- 第四步,你只能移除第四个字符 s4= b,因为 s3= a(或 s5= a)。此时字符串变为 s= acaa,无法再进行操作。
你的任务是,若每次操作都选择最优方案,求最多可以移除多少个字符。
输入格式
第一行输入一个整数 ∣s∣(1≤∣s∣≤100),表示字符串 s 的长度。
第二行输入一个长度为 ∣s∣ 的字符串 s,仅包含小写拉丁字母。
输出格式
输出一个整数,表示在最优操作方案下,最多可以移除的字符数。
输入输出样例
输入#1
8 bacabcab
输出#1
4
输入#2
4 bcda
输出#2
3
输入#3
6 abbbbb
输出#3
5
说明/提示
第一个样例已在题目描述中给出。注意,题目中给出的操作顺序不是唯一的,但可以证明该测试的最大答案为 4。
在第二个样例中,你可以将 s 的所有字符都移除,只剩下一个字符。具体操作如下:
- 第一步,移除第三个字符 s3= d,s 变为 bca。
- 第二步,移除第二个字符 s2= c,s 变为 ba。
- 第三步,移除第一个字符 s1= b,s 变为 a。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?