题目描述
小马是一名算法竞赛爱好者,他认为算法竞赛中表示答案正确的单词 ACCEPT 能给他带来好运,碰巧今天英语课上他得到了一串由 n 个大写字母组成的字符串。他想知道,如果他可以将这串字符串以任意顺序进行重新排列,字符串中最多能出现多少个连续的 ACCEPT ?
输入描述:
本题包含多组测试数据,第一行给出一个整数 T(1≤T≤10^3),表示数据组数。
对于每组测试数据,第一行给出一个整数 n(1≤n≤10^3),表示字符串的长度,下一行为对应的字符串,字符串仅由大写字母构成。
输出描述:
输出 T 行,每行一个整数。
示例1
输入
3
10
ACCEPACCEP
12
AACCCCEEPPTT
29
ABCDEFGHIJKLMNOPQRSTUVWXYZABC
输出
0
2
1
思路
统计A、C、E、P、T这5个字母出现的次数,其中C的次数要除以二,然后找出它们中出现最少次数的值,即为结果。
代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt() ; while(t-- > 0){ int [] a = new int[97] ; int min = Integer.MAX_VALUE; int num = 0; int length = sc.nextInt() ; String b = sc.next() ; for(int i = 0 ; i < length ; i ++){ a[b.charAt(i)] ++ ; //若字符串第1个字母为A,则a[65]++ } num = Math.min(min,a['A']) ;//比较大小,筛选出最小值 num = Math.min(num,a['C']/2) ; num = Math.min(num,a['E']) ; num = Math.min(num,a['P']) ; num = Math.min(num,a['T']) ; System.out.println(num) ; } } }