字符串中的子字符串计数

substring count in a string

本文关键字:字符串      更新时间:2023-10-16

给定一个长度为 n 的字符串 s. 我们必须计算存在给定字符串的字符 s[i] 的子字符串的数量,其中字符 s[i] 是元音。

示例:在这个字符串"编码"中,字符"o"存在于10个子字符串中,字符"i"存在于12个子字符串中。 所以总共 22 是答案。

约束:字符串大小最大为 10^5,测试用例数最多为 10^2。

注意:字符串可能包含大写或小写字母。

我为此编写了一个 c++ 程序。但它给予的时间限制超过了。对于较小大小的字符串,它运行良好。任何人都可以帮助我为此类问题提供实际和更好的逻辑,这些问题也可以运行更大的字符串大小。

我的尝试:

#include <bits/stdc++.h>
using namespace std;

int main() 
{
int t;
cin >> t;
while (t--)
{
int n,i;
cin >> n;
string str;
cin >> str;

unsigned long long int 
sum=0,pp;
for(i=0;i<n;i++)
{
if(str[i]=='a' || str[i]=='A' || str[i]=='e' || str[i]=='E' || str[i]=='i' || str[i]=='I' || str[i]=='o' || str[i]=='O' || str[i]=='u' || str[i]=='U')
{
pp=(i+1)*(n-i);
sum=sum+pp;
}
}
cout <<sum << 'n';
}

}

不要暴力破解。做一个组合数学作业。

提示#1:长度n的字符串具有n*(n+1)/2子字符串。

提示#2:元音将原始字符串划分为一组辅音子字符串。长度为k的辅音子字符串反过来生成k*(k+1)/2不应计算的子字符串。

这应该足以让你继续前进。