直接找A,每个A前的P和后的T个数乘积,再加和,就是输出的数了
//意料之中的超时了三个测试点
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
//输入
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
long sum = 0;//记录PAT的个数
for (int i = 0; i < str.length() - 1; i++) {//遍历整个字符串
if (str.charAt(i) == 'A') {//找到A的所有下标
sum += P(str, i) * T(str, i);//用每个A的PAT组合加和
}
continue;
}
System.out.println(sum % 1000000007);//由于结果可能比较大,只输出对 1000000007 取余数的结果
}
public static long P(String str, int a) {//计算下标a之前“P”的个数
long P = 0;//记录P的个数
for (int i = 0; i < a; i++) {
if (str.charAt(i) == 'P') {
P++;
}
continue;
}
return P;
}
public static long T(String str, int a) {//计算下标a之后“T”的个数
long T = 0;//记录T的个数
for (int i = str.length() - 1; i > a; i--) {
if (str.charAt(i) == 'T') {
T++;
}
continue;
}
return T;
}
}
继续修改:
//25分
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
//输入
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
int num_P = 0, num_T = 0;
long sum = 0;//记录PAT的个数
int a[] = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == 'P') {
num_P++;
} else if (str.charAt(i) == 'A') {
a[i] = num_P;// 将当前A前面的P的个数保存
}
}
for (int i = str.length() - 1; i >= 0; i--) {// 统计每个A后面T的个数
if (str.charAt(i) == 'T') {
num_T++;
} else if (str.charAt(i) == 'A') {
sum += a[i] * num_T;// 当前A前面的P的个数×当前A后面的T的个数
}
}
System.out.println(sum % 1000000007);//由于结果可能比较大,只输出对 1000000007 取余数的结果
}
}
相同思想-不同写法:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
char[] c = bf.readLine().toCharArray();
bf.close();
int pat=0,at=0,t=0;
for(int i=c.length-1;i>=0;i--) {
if(c[i]=='T')
t++;
else if(c[i]=='A')
at=(t+at)%1000000007;
else
pat=(pat+at)%1000000007;
}
System.out.print(pat);
}
}