【发布时间】: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 时,您就是这样做的。
标签: c++ string algorithm palindrome