Bulls and Cows
给两个string, 两个string中的字符相同并且位置相同叫bull, 字符相同位置不同叫cow. 求几个bull 几个cow. 这个题很好玩, 一般情况下就count然后做, 但是仔细想一下, 如果排除了相同位置, 相同字符的字符, 剩下的是什么? 是如果位置不同, 字符不同, 那么在两个strings中, 会出现一个是0, 另外一个有数的情况. 还有一种情况是位置不同, 但是字符相同(cow). 这种情况的字符有可能是一个多, 另一个少, 我们要选少的部分. 所以综合上面两种都选少的部分的情况. 是取两个counting数组,上字符少的那个.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Solution { public String getHint(String secret, String guess) { int[] cs = new int[10]; int[] cg = new int[10]; int n = secret.length(); for(int i = 0; i < n; i++) { cs[secret.charAt(i)- '0']++; cg[guess.charAt(i)- '0']++; } int b = 0; int c = 0; for(int i = 0; i < n; i++) { if(secret.charAt(i) == guess.charAt(i)){ b++; cs[secret.charAt(i) - '0']--; cg[guess.charAt(i) - '0']--; } } for(int i = 0; i < 10; i++) { c += Math.min(cs[i], cg[i]); } return b+"A"+c+"B"; } } |