题目
农夫约翰试图通过给奶牛一套通常用于学龄前儿童的 N
个拼写板来教他的奶牛阅读。
每个拼写板的每一侧都有一个单词和一个图画。
例如,一侧可能有单词 cat
和一只小猫,另一侧可能有单词 dog
和一只小狗。
因此,当所有拼写板放置到地面上时,会显示一组 N
个单词。
通过翻转其中一部分板子,就可以得到另一组 N
个单词。
为了帮助奶牛练习单词拼写,约翰想要制作一些木块,在每个木块上都印上一个字母,使得奶牛可以使用这些木块拼出看到的单词。
为了使得无论哪一组 N
个单词朝上显示,奶牛都能将其全部拼出,就需要印有各种字母的木块都足够的多。
例如,如果 N=3
且单词 box,cat,car
朝上显示,则奶牛至少需要一个 b
块,一个 o
块,一个 x
块,两个 c
块,两个 a
块,一个 t
块和一个 r
块。
请帮助约翰确定,印有每种字母的木块至少需要提供多少块,才能使得不管每个板子的哪一侧朝上显示,奶牛都可以拼出所有 N
个可见的单词。
代码
import java.util.*;
public class Main {
static int N = 100010;
static int n;
static int[] ans = new int[26];
static int[] sum = new int[26];
static int[] sum1 = new int[26];
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
n = inScanner.nextInt();
String a;
for(int i = 1; i <= n; i ++)
{
a = inScanner.next();
for(int j = 0; j < a.length(); j ++)
sum[a.charAt(j) - 'a'] ++;
a = inScanner.next();
for(int j = 0; j < a.length(); j ++)
sum1[a.charAt(j) - 'a'] ++;
for(int j = 0; j < 26; j ++)
{
ans[j] += Math.max(sum[j], sum1[j]);
sum[j] = sum1[j] = 0;
}
}
inScanner.close();
for(int i = 0; i < 26; i ++)
System.out.printf("%d\n", ans[i]);
}
}