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 翻译