题目
oj平台
题目解析
- 直接计算两个字符串的各个字母的出现频次,把位置相同得到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++){
if(secret[i]==guess[i]){
res1++;
secret[i] = '_';
}
}
for(int i=0;i<n;i++){
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";
}
};