Bulls and Cows
给两个string, 两个string中的字符相同并且位置相同叫bull, 字符相同位置不同叫cow. 求几个bull 几个cow. 这个题很好玩, 一般情况下就count然后做, 但是仔细想一下, 如果排除了相同位置, 相同字符的字符, 剩下的是什么? 是如果位置不同, 字符不同, 那么在两个strings中, 会出现一个是0, 另外一个有数的情况. 还有一种情况是位置不同, 但是字符相同(cow). 这种情况的字符有可能是一个多, 另一个少, 我们要选少的部分. 所以综合上面两种都选少的部分的情况. 是取两个counting数组,上字符少的那个.
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";
}
}