题目描述
解答
首先公牛数量好算,只要看对应位置的值是否相同。
而对于奶牛数量,是指可以通过改变位置后变成公牛的值,那么就是指两个数组中相同值的数量的最小值,也就是说当有多个相同值时,只有对应最少量的可以变成公牛。
这里可以用计数数组来分别统计对应值的数量,然后取两个数组对应位置最小的值。
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";
}
};
复杂度分析
- 时间复杂度:O(N)O(N),其中 NN 是字符串 \textit{secret}secret 的长度。
- 空间复杂度:O©O©。需要常数个空间统计字符出现次数,由于我们统计的是数字字符,因此 C=10C=10。