[Leetcode] 第299题 猜数字游戏
阅读原文时间:2023年07月16日阅读:1

一、题目描述

请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。

请注意秘密数字和朋友的猜测数都可能含有重复数字。

示例 1:

输入: secret = "1807", guess = "7810"

输出: "1A3B"

解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7

示例 2:

输入: secret = "1123", guess = "0111"

输出: "1A1B"

解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。

说明: 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等

二、题目分析

1)cnt1和cnt2分别代表A和B的数目

2)统计出secret中字符出现的次数mp1,然后统计在guess和secret中同时出现但是位置不正确字符的出现次数map2

三、代码实现

class Solution {
public:
string getHint(string secret, string guess) {
unordered_mapmp1, mp2;
int cnt1 = , cnt2 = ;
for (int i = ; i < secret.size(); ++i) { ++mp1[secret[i]]; } for (int i = ; i < guess.size(); ++i) { if (i < secret.size() && guess[i] == secret[i]) { --mp1[secret[i]]; ++cnt1; } else if (mp1.find(guess[i]) != mp1.end()) { ++mp2[guess[i]]; } } for (auto it = mp2.begin(); it != mp2.end(); ++it) { if (mp1[it->first] > )cnt2 += min(mp1[it->first], mp2[it->first]);
}
string res = itos(cnt1) + "A" + itos(cnt2) + "B";
cout << endl; return res; } private: string itos(int x) { stringstream is; is << x; string res; is >> res;
return res;
}
};

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章