zoukankan      html  css  js  c++  java
  • 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";
        }
    };
    
  • 相关阅读:
    Tomcat在Linux下的安装与配置
    Intel S5000VSA(SAS)主板设置RAID 步骤【转】
    eclipse 安装Subversion1.82(SVN)插件
    shell脚本分析nginx日志
    shell脚本抓取网页信息
    shell脚本备份日志
    电力项目十一--js添加浮动框
    电力项目五--主界面分析
    This function has none of DETERMINISTIC, NO SQL
    mysql导入数据失败:mysql max_allowed_packet 设置过小
  • 原文地址:https://www.cnblogs.com/linrj/p/13572597.html
Copyright © 2011-2022 走看看