建议一些方法来减少以下代码的时间复杂性。
问题是:
This is question
This is sample input output
此代码工作正常,除了两种情况(由于时间限制2s而终止)
#include<stdio.h>
#include<string.h>
int main()
{
unsigned char str[1000000];
unsigned long int l;
int i,j,t,k,c=0;
scanf("%d",&t);
for(k=0;k<t;k++)
{
c=0;
scanf("%lu",&l);
scanf("%s",str);
for(i=0;i<l-1;i++)
{
for(j=i+1;j<l;j++)
if(str[i]=='S' && str[j]=='A')
c++;
}
printf("%d\n",c);
}
return 0;
}
答案 0 :(得分:0)
我使用以下算法来解决: 遍历字符串: 一个变量计数,它将存储当前找到的A之前的S的数量和总数,即已找到的总子串。
int total=0,count=0;
for(int j=0; j < s.length(); ++j){ //s.length or till wherever you want to find
if(s[j] == 'A') total+=count;
else if(s[j]=='S') count++;
}