字符串中的子字符串计数
Posted
技术标签:
【中文标题】字符串中的子字符串计数【英文标题】:substring count in a string 【发布时间】:2020-05-31 15:25:55 【问题描述】:给定一个长度为 n 的字符串 s。我们必须计算存在给定字符串的字符 s[i] 的子字符串的数量,其中字符 s[i] 是元音。
示例:在此字符串“coding”中,字符“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';
【问题讨论】:
您能否准确解释一下您是如何得出结论的,即在字符串“coding”中,“字符 'o' 存在于 10 个子字符串中”?这 10 个子串是什么? 这个问题与 palindromes 有什么关系?为什么要求用户输入 n ? n 的目的是什么? Sir 'o' 出现在 co,od,odi,odin,oding,codi,coding,coding,o,cod 中。 在“codin”中。我必须打折你的两个“编码”之一。 虽然确实有 10 个包含o
的子字符串和 12 个包含 i
的子字符串,但它们并不是完全不同的:例如odi
计入这两个总数。你应该计算这样的子串两次吗?当您将 10 和 12 相加并声明总数为 22 时,您就是这样做的。
【参考方案1】:
不要暴力破解。做一个组合功课。
提示 #1:长度为 n
的字符串具有 n*(n+1)/2
子字符串。
提示 #2:元音将原始字符串划分为一组辅音子字符串。长度为k
的辅音子串依次生成k*(k+1)/2
子串不应计算。
这应该足以让你继续前进。
【讨论】:
以编码为例,子串总数为21,即n*(n+1)/2。现在一组分区辅音是 c, d, ng .so 由它们形成的子串总数是 1+1+3=5 所以至少有一个元音出现的子串数是 21-5 =16。但是先生,答案是 22。我解释你的第二个提示错了吗?以上是关于字符串中的子字符串计数的主要内容,如果未能解决你的问题,请参考以下文章