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";
    }
}