leetcode打卡——299. 猜数字游戏(求交集or标记法)

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode打卡——299. 猜数字游戏(求交集or标记法)相关的知识,希望对你有一定的参考价值。

题目


oj平台

题目解析

  • 题目有两种思路:
  1. 直接计算两个字符串的各个字母的出现频次,把位置相同得到res1(不计算在内),然后求两者的交集(最小值)即为res2。
  2. 直接遍历两次,第一次求res1,第二次求res2,第一次用不可能的字符进行标记,方便第二次识别。

解题代码

法一

class Solution {
public:
    string getHint(string secret, string guess) {
        int bulls = 0;
        vector<int> cntS(10), cntG(10);
        for (int i = 0; i < secret.length(); ++i) {
            if (secret[i] == guess[i]) {
                ++bulls;
            } else {
                ++cntS[secret[i] - '0'];
                ++cntG[guess[i] - '0'];
            }
        }
        int cows = 0;
        for (int i = 0; i < 10; ++i) {
            cows += min(cntS[i], cntG[i]);
        }
        return to_string(bulls) + "A" + to_string(cows) + "B";
    }
};

法二

class Solution {
public:
    string getHint(string secret, string guess) {
        //每次扫出答案后,把它们用记号替代
        int res1=0,res2=0;
        int n = secret.size();
        for(int i=0;i<n;i++){//第一遍扫出res1,并更改值为'_'
            if(secret[i]==guess[i]){
                res1++;
                secret[i] = '_';
            }
        }
        for(int i=0;i<n;i++){//第二遍扫除res2,并更改值为'*'
            if(secret[i]=='_')
            continue;
            int j = secret.find(guess[i]);
            if(j!=-1){
                res2++;
                secret[j] = '*';
            }
        }
    return to_string(res1)+"A"+to_string(res2)+"B";
    }
};

以上是关于leetcode打卡——299. 猜数字游戏(求交集or标记法)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-299. 猜数字游戏

LeetCode-299. 猜数字游戏

leetcode每日一题-299:猜数字游戏

18行代码AC-Leecode 299. 猜数字游戏——Leecode每日一题系列

leetcode 299. 猜数字游戏(Bulls and Cows)

LeetCode 299. 猜数字游戏