</pre><div id="problemContent"> <p>字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。</p><p>现给定字符串,问一共可以形成多少个PAT?</p><p><strong>输入格式:</strong></p><p>输入只有一行,包含一个字符串,长度不超过10<sup>5</sup>,只包含P、A、T三种字母。</p><p><strong>输出格式:</strong></p><p>在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对1000000007取余数的结果。</p><strong>输入样例:</strong><pre>APPAPT
输出样例:
2
//只有15分,有算法错误和运行超时
#include<iostream> using namespace std; #include<stdio.h> #include<string.h> #define MAX 1000000007; int a[10000]; int b[10000]; char s[10000]; int main() { int p=0; int n=0; int nn=0; int count=0; int A=0,T=0; cin.getline(s,10000,'\n'); for(int i=0;i<strlen(s);i++) { if(s[i]=='P') { a[p]=i;//存储p的位置 p++; } } while(n!=p) { for(int j=a[n]+1;j<strlen(s);j++) { if(s[j]=='A') { b[nn]=j;//存放A的地址 A++; nn++; } } for(int k=0;k<A;k++)//去找有多少个T { for(int x=b[k]+1;x<strlen(s);x++) { if(s[x]=='T') { T++; } } count=count+T; count=count%MAX; T=0; } n++; nn=0; A=0; } cout<<count<<endl; }