leetCodeの「299. Bulls and Cows」を解いた。
https://leetcode.com/problems/bulls-and-cows/
なかなかリーダブルなコードが書けたので、今後参考にするために、書いたコードをここに残しておく。
class Solution { public String getHint(String secret, String guess) { int bull = 0; int cow = 0; Map<Character, Integer> secretDigitToCnt = new HashMap<>(); Map<Character, Integer> guessDigitToCnt = new HashMap<>(); for (int i = 0; i < secret.length(); i++) { if (secret.charAt(i) == guess.charAt(i)) { bull++; } else { secretDigitToCnt.put(secret.charAt(i), secretDigitToCnt.getOrDefault(secret.charAt(i), 0) + 1); guessDigitToCnt.put(guess.charAt(i), guessDigitToCnt.getOrDefault(guess.charAt(i), 0) + 1); } } // secretDigitToCnt や guessDigitToCnt の key (char型) には、'0', '1', ... , '9' (に対応した数値) が入っている。 // 具体的には、'0'=48, '1'=49, ... , '9'=57 といった感じ。 for (char ch = '0'; ch <= '9'; ch++) { if (secretDigitToCnt.get(ch) != null && guessDigitToCnt.get(ch) != null) { cow += Math.min(secretDigitToCnt.get(ch), guessDigitToCnt.get(ch)); } } StringBuilder ans = new StringBuilder(); ans.append(bull).append('A').append(cow).append('B'); return ans.toString(); } }