CF1096B Substring Removal
题目描述
给定一个长度为 $n$ 的字符串 $s$,该字符串仅由小写拉丁字母组成。
字符串的子串是该字符串的一个连续子序列。例如,字符串 "forces" 是字符串 "codeforces" 的子串,但字符串 "coder" 不是。
你的任务是计算有多少种方法可以恰好删除 $s$ 的一个子串,使得剩下的所有字符都相同(即剩下的字符种类要么为零,要么为一种)。
保证 $s$ 中至少有两种不同的字符。
注意,你可以删除整个字符串,这也是合法的。同时你必须至少删除一个字符。
由于答案可能很大(但不会非常大),请输出答案对 $998244353$ 取模后的结果。
如果你使用 Python 编程,建议提交时使用 PyPy。
输入格式
输入的第一行包含一个整数 $n$($2 \le n \le 2 \times 10^5$),表示字符串 $s$ 的长度。
输入的第二行包含一个长度为 $n$ 的字符串 $s$,仅由小写拉丁字母组成。
保证 $s$ 中至少有两种不同的字符。
输出格式
输出一个整数,表示有多少种方法可以删除恰好一个子串,使得剩下的所有字符都相同。答案对 $998244353$ 取模。
说明/提示
设 $s[l; r]$ 表示从位置 $l$ 到位置 $r$(包含两端)的子串。
那么在第一个样例中,你可以删除以下子串:
- $s[1; 2]$;
- $s[1; 3]$;
- $s[1; 4]$;
- $s[2; 2]$;
- $s[2; 3]$;
- $s[2; 4]$。
在第二个样例中,你可以删除以下子串:
- $s[1; 4]$;
- $s[1; 5]$;
- $s[1; 6]$;
- $s[1; 7]$;
- $s[2; 7]$;
- $s[3; 7]$。
在第三个样例中,你可以删除以下子串:
- $s[1; 1]$;
- $s[1; 2]$;
- $s[2; 2]$。
由 ChatGPT 4.1 翻译