leetcode打卡——299. 猜数字游戏(求交集or标记法)
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode打卡——299. 猜数字游戏(求交集or标记法)相关的知识,希望对你有一定的参考价值。
题目
题目解析
- 题目有两种思路:
- 直接计算两个字符串的各个字母的出现频次,把位置相同得到res1(不计算在内),然后求两者的交集(最小值)即为res2。
- 直接遍历两次,第一次求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标记法)的主要内容,如果未能解决你的问题,请参考以下文章
18行代码AC-Leecode 299. 猜数字游戏——Leecode每日一题系列