問題と公式の解答へのリンク
問題 B - Commencement https://atcoder.jp/contests/abc349/tasks/abc349_b
公式の解答へのリンク https://atcoder.jp/contests/abc349/editorial/9778
解答例 自分の
Javaの解答例(自作)
Point
- 文字が何文字出てきてますかー
- 1回の繰り返しの文字の種類は、、2回の繰り返しの文字の種類は、、って100回の繰り返しの文字の種類は?ってforループさせます。
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int sLength = s.length(); Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < sLength; i++) { map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1); } for (int i = 1; i <= 101; i++) { int count = 0; for (Integer num : map.values()) { if (num == i) { count ++; } } if (! (count == 0 || count == 2)) { System.out.println("No"); return; } } System.out.println("Yes"); sc.close(); } }
公式の解答(Python)をJavaに変換
公式の解答(Python)をJavaに変換
Point
- アルファベットは26文字
- char型の'a'は97、'b'は98というように、char型のアルファベットの持つ数値は連続している。
アルファベットを出力するコード
char c = 'a'; for (int i = 0; i < 26; i++) { System.out.println(c++); }
解答例
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String S = scanner.nextLine(); int[] cnt = new int[26]; // 文字が出てきたら数えている // 配列のindex=0が1文字目、つまりaを意味している。 for (char c : S.toCharArray()) { cnt[c - 'a']++; } // 1文字連続、2文字連続・・・100文字連続が何種類あるかを数える int[] cnt2 = new int[101]; for (int c : cnt) { if (c > 0) { cnt2[c]++; } } // 判定 boolean isAllZeroOrTwo = true; for (int c : cnt2) { if (c != 0 && c != 2) { isAllZeroOrTwo = false; break; } } System.out.println(isAllZeroOrTwo ? "Yes" : "No"); } }