题解:B4031 [语言月赛 202409] 始终

Firsry AC/WA/RE/TLE

题目描述

已知小写字母组成的字符串 ,请求出它有多少首字母尾字母相同的子串

题解

(第一次写红题题解,好激动 bushi)

注意到 做法,但是他不够优秀,如果 ,这个题目其实也是红题。

考虑字串的构成仅仅与首字母和尾字母有关,所以把思路聚焦到枚举字符。对于一个字符 中出现次数次数是 ,则答案是:

注意到还有另一类不能通过枚举首尾字母统计的,就是单个字符,由于都满足,所以加 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<bits/stdc++.h>

using namespace std;

string s;
int cnt[26];
int ans;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);

cin >> s;
for (char i : s)
cnt[i - 'a']++;
for (int i = 0; i < 26; ++i)
ans += cnt[i] * (cnt[i] - 1) / 2;
cout << ans + s.size();
return 0;
}
  • Title: 题解:B4031 [语言月赛 202409] 始终
  • Author: Firsry
  • Created at : 2025-08-11 18:19:54
  • Updated at : 2025-08-11 21:17:07
  • Link: https://firsryfan.github.io/2025/08/11/题解:B4031-语言月赛-202409-始终/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
题解:B4031 [语言月赛 202409] 始终