299. 猜数字游戏

69 阅读1分钟

299. 猜数字游戏

class Solution:
    def getHint(self, secret: str, guess: str) -> str:
        # 数字和位置都对的个数 A  数字对但位置不对  B
        # 数字 只能是 0 - 9 
        # 统计非 位置数字 均相等 情况下 的两个数 中分别出现的数字的频次。

        x, y = 0, 0
        cntS, cntG = [0] * 10, [0] * 10  # 同一位置 不相等   数字出现的频次。因为 guess 猜的某个数字的频次 要是高于 secret , 也用不到

        for s, g in zip(secret, guess):
            if s == g:
                x += 1
            else:
                cntS[int(s)] += 1
                cntG[int(g)] += 1                

        y = sum(min(s, g) for s, g in zip(cntS, cntG))
        return f'{x}A{y}B'
        # return str(x) + "A" + str(y) + "B"

image.png

class Solution {
public:
    string getHint(string secret, string guess) {
        int x = 0;
        vector<int> cntS(10), cntG(10);
        for (int i = 0; i < secret.size(); ++i){
            if (secret[i] == guess[i]){
                ++x;
            }else{
                ++cntS[secret[i] - '0'];  // 转成数字
                ++cntG[guess[i] - '0'];
            }
        }
        int y = 0;
        for (int i = 0; i < 10; ++i){//注意这里是 10
            y += min(cntS[i], cntG[i]);
        }
        return to_string(x) + "A" + to_string(y) + "B";
    }
};