• LeetCode299. 猜数字游戏


    先同时遍历两个数组,计算相同位置上相同的字母个数,记为cntA。
    在遍历的同时,如果相同位置上两个字母不同,就在一个哈希表unordered_map<char, int>上记录不同的数字(在字符串secret)出现的次数。

    然后遍历guess数组,用一个变量cntB记录出现在秘密数字中,但位置不一致的数的个数。
    遍历到一个字母,这个字母和secret中对应位置的字母不同且哈希表中该字母出现次数大于0,则cntB++,表示找到了一个出现在秘密数字中,但位置不一致
    的数字,然后哈希表中该数字的出现次数减一,表示可用的这个数字少了一个。

    最后得到cntA和cntB就是A和B的个数,按照题目的要求返回即可。

    代码如下:

    class Solution {
    public:
        string getHint(string secret, string guess) {
            int size = secret.size();
            unordered_map<char, int> frequency;                  // 记录secret中那些 和guess数组中相同位置的元素不同的元素出现的次数
            int cntA = 0;
            for(int i = 0; i < size; ++i) {
                if(secret[i] == guess[i]) {
                    ++cntA;
                } else {                                         // 如果对应位置的数字不同,则记录一下有可能成为B的数字的个数
                    ++frequency[secret[i]];
                }
            }
            int cntB = 0;
            for(int i = 0; i < size; ++i) {
                if(secret[i] != guess[i]) {
                    if(frequency[guess[i]] > 0) {                // 当前位置数字和secret中的数字不相等,且我们知道secret中其他位置有这个数字,则我们找到了一个B
                        ++cntB;
                        --frequency[guess[i]];                   // 可用数字数量减一
                    }
                }
            }
            return to_string(cntA) + "A" + to_string(cntB) + "B";
        }
    };
    
  • 相关阅读:
    软件开发模版与规范 & 项目组规范
    CSS代码结构初探
    DIV+CSS 一行两列布局
    AE 9.3代码 升级到AE10.0
    栅格相减 异常
    鹰眼视图异常
    十进制度批量转换度分秒
    javascript是一朵奇葩
    pku 1065 pku 1548
    hdu 1254 推箱子
  • 原文地址:https://www.cnblogs.com/linrj/p/13572597.html
Copyright © 2020-2023  润新知