299. 猜数字游戏
我的方法
使用map记录不一样的地方的数值
然后再次遍历,查看b的数量
class Solution {
public:
string getHint(string secret, string guess) {
unordered_map<char,int> secretMap;
int a = 0;
int b= 0;
for(int i=0;i<guess.size();i++){
if(secret[i] == guess[i]){
a++;
}else{
secretMap[secret[i]]++;
}
}
for(int i=0;i<guess.size();i++){
if(secret[i] != guess[i] && secretMap[guess[i]]>0){
b++;secretMap[guess[i]]--;
}
}
return to_string(a)+"A"+to_string(b)+"B";
}
};
但是可以只进行一次,记录每个不匹配位置元素的个数,secret和guess各一个vector
然后取他们之间最小的那个
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";
}
};