先统计出每个字符的出现次数

然后直接三重循环枚举构造的长度为3的字符串分别选用哪3个字母,按照 枚举保证不会出现重复,字母i在原串中有cnt[i]个,因此从原串中取一个字母i一个字母j一个字母k的方案数为 然后再乘以三个字母的全排列 ,累加到答案上。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10, mod = 998244353;
char s[N];
int cnt[26];
int main() {
    int n;
    scanf("%d%s", &n, s + 1);
    for (int i = 1; i <= n; i ++) cnt[s[i] - 'a'] ++;
    int ans = 0;
    for (int i = 0; i < 26; i ++)
        for (int j = i + 1; j < 26; j ++)
            for (int k = j + 1; k < 26; k ++)
                ans = (ans + (LL)cnt[i] * cnt[j] * cnt[k] * 6) % mod;
    printf("%d\n", ans);
    return 0;
}