此题就是用一个for循环,遍历secret 和 guess的各个位的数字,对于相同位置且对应数字相同的,bulls++;对于相同位置而对应数字不同的情况,分别用两个数组/哈希表存储相应数字的出现次数。
给出两种解法的C++代码:
class Solution {
public:string getHint(string secret, string guess) {
int bulls = 0;
int cows = 0;
unordered_map<char, int> secret_mp;
unordered_map<char, int> guess_mp;
for(int i=0;i<secret.size();i++){
if(secret[i]==guess[i])
bulls++;
else{
if(secret_mp[guess[i]]>0){
cows++;
secret_mp[guess[i]]--;
}
else{
guess_mp[guess[i]]++;
}
if(guess_mp[secret[i]]>0){
cows++;
guess_mp[secret[i]]--;
}
else{
secret_mp[secret[i]]++;
}
}
}
return to_string(bulls)+"A"+to_string(cows)+"B";
}
};
/*解法二:
class Solution {
public:
string getHint(string secret, string guess) {
int bulls = 0;
int cows = 0;
int number[10]={0};
for(int i=0;i<secret.size();i++){
if(secret[i]==guess[i])
bulls++;
else{
if(number[secret[i]-'0']<0)
cows++;
if(number[guess[i]-'0']>0)
cows++;
number[secret[i]-'0']++;
number[guess[i]-'0']--;
}
}
return to_string(bulls)+"A"+to_string(cows)+"B";
}
};
*/