题意:
1、给出一个字符串,统计有多少个PAT,也就是找出A左边的P,右边的T,然后P的个数乘以T的个数
解题:
1、设置一个变量,统计P的个数
2、设置另一个变量,统计T的个数
3、最后直接相乘即可
learn && wrong:
1、懂了为什么左边不是直接复制右边了,因为左边一开始就有个A,根本过不去,所以只能答案那招,累计左右
If>0,先让他们相等,再一个if,累加P个数
2、T其实也可以这样做,但是答案简化了,直接给一个变量累加,遇到相乘并加上ans即可
3、--i没编译错误,但就是不输出,我尼玛
4、中间的A可能是有多个的,所以ans需要累加,虽然A多个,但左右P和T的个数不变,所以只需要遇到A,相乘就可以了
#include <iostream>
#include <cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop
*/
const int maxn = 100010;
const int MOD = 1000000007;
char str[maxn];
int leftnump[maxn] = {0};//左边每一位含有P的个数
int main(int argc, char** argv) {
cin>>str;
int len = strlen(str);
//统计左边P的个数
int j;
for(j = 0;j < len;++j){
if(j > 0){
leftnump[j] = leftnump[j - 1];
}
if(str[j] == 'P'){
leftnump[j]++;
}
}
int right_Tnum = 0;
int ans = 0;
for(int i = len - 1;i >= 0;--i){
if(str[i] == 'T'){
right_Tnum++;
}else if(str[i] == 'A'){
ans = (ans + right_Tnum * leftnump[i]) % MOD;
}
}
cout<<ans<<endl;
return 0;
}
网友评论