原题是要计算一个字符串中,以ABC....Z出现的组合数
package com.company.exam;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* 计算一个字符串中,ABCD...Z顺序出现的个数
* meng3.wei
*/
public class ABC2 {
public static void main(String[] args) throws Exception{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
int T=Integer.parseInt(reader.readLine());//T个测试用例
for (int i = 0; i < T; i++) {
int N=Integer.parseInt(reader.readLine());//字符串的长度,这个其实没有用
String str=reader.readLine();
System.out.printf("#%d %d\n",(i+1),process(str));
}
reader.close();
}
public static long process(String str){
char[] arr=str.toCharArray();
long[] dp=new long[arr.length];//保存截止每个位置,这个字母的前一个字母,出现的次数
for (int i = 0; i <arr.length ; i++) {//先把每个A的数量给确定一下
if(arr[i]=='A'){
dp[i]=1;
}
}
for (char ch = 'B'; ch <='Z' ; ch++) {
long cnt=0;
for (int i = 0; i <arr.length ; i++) {
if(arr[i]==ch){//找到当前字母了
dp[i]=cnt;
}else if(arr[i]== ch-1){//当前获取到的是上一个字母
cnt=cnt+dp[i];
}
}
}
long l=0;
for (int i = 0; i <arr.length ; i++) {
if(arr[i]=='Z'){
l=l+dp[i];
}
}
return l;
}
}