Bulls and Cows

题目来源
猜数字的游戏,然后我做的时候想的是用哈希,遍历两遍,第一遍记录下secret每个字母出现的频次,然后第二遍遍历进行比较。
代码如下:

class Solution {
public:
    string getHint(string secret, string guess) {
        int n = secret.size();
        int a = 0, b = 0;
        unordered_map<char, int> maps;
        for (int i=0; i<n; i++)
            maps[secret[i]]++;
        for (int i=0; i<n; i++) {
            if (guess[i] == secret[i]) {
                a++;
                maps[secret[i]]--;
                if (maps[secret[i]] < 0)
                    b--;
            }
            else if (maps.count(guess[i]) != 0 && maps[guess[i]] > 0) {
                b++;
                maps[guess[i]]--;
            }
        }
        return to_string(a) + "A" + to_string(b) + "B";
    }
};

然后发现写的不太好,看了下讨论区,修改后代码如下:

class Solution {
public:
    string getHint(string secret, string guess) {
        int n = secret.size();
        int a = 0, b = 0;
        vector<int> sVec(10, 0);
        vector<int> gVec(10, 0);
        for (int i=0; i<n; i++)
            if (secret[i] == guess[i])
                a++;
            else {
                sVec[secret[i] - '0']++;
                gVec[guess[i] - '0']++;
            }
        for (int i=0; i<10; i++)
            b += min(sVec[i], gVec[i]);
        return to_string(a) + "A" + to_string(b) + "B";
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容