暴力方法:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
long long int max=0;
char s[100005];
cin.getline(s,100005);
for(int i=0;i<strlen(s);i++){
if(s[i]=='P'){
for(int j=i+1;j<strlen(s);j++){
if(s[j]=='A'){
for(int k=j+1;k<strlen(s);k++){
if(s[k]=='T'){
max++;
max%=1000000007;
}
}
}
}
}
}
cout<<max;
return 0;
}
柳神代码:
思路:每次扫描到A,用这个A前面的P数量*A后面T的次数temp,并且将此次的次数加入总次数中。
#include <iostream>
#include <cstring>
using namespace std;
int main(){
long long int max=0,p=0,a=0,t=0,temp;
char s[100005];
cin.getline(s,100005);
for(int i=0;i<strlen(s);i++){
if(s[i]=='T')
t++;
}
for(int i=0;i<strlen(s);i++){
if(s[i]=='P')
p++;
else if(s[i]=='A'){
temp=(p*t)%1000000007;
max=(max+temp)%1000000007;
}
else if(s[i]=='T')
t--;
}
cout<<max;
return 0;
}
本文对比了两种计算字符串中PA-T子串出现次数的方法,暴力方法通过三层嵌套循环,而柳神代码则利用动态维护P和A的数量,显著提高了效率。两种方法的优缺点和适用场景分析。
2995

被折叠的 条评论
为什么被折叠?



