题目来源
猜数字的游戏,然后我做的时候想的是用哈希,遍历两遍,第一遍记录下secret每个字母出现的频次,然后第二遍遍历进行比较。
代码如下:
class Solution {
public:
string getHint(string secret, string guess) {
int n = secret.size();
int a = 0, b = 0;
unordered_map<char, int> maps;
for (int i=0; i<n; i++)
maps[secret[i]]++;
for (int i=0; i<n; i++) {
if (guess[i] == secret[i]) {
a++;
maps[secret[i]]--;
if (maps[secret[i]] < 0)
b--;
}
else if (maps.count(guess[i]) != 0 && maps[guess[i]] > 0) {
b++;
maps[guess[i]]--;
}
}
return to_string(a) + "A" + to_string(b) + "B";
}
};
然后发现写的不太好,看了下讨论区,修改后代码如下:
class Solution {
public:
string getHint(string secret, string guess) {
int n = secret.size();
int a = 0, b = 0;
vector<int> sVec(10, 0);
vector<int> gVec(10, 0);
for (int i=0; i<n; i++)
if (secret[i] == guess[i])
a++;
else {
sVec[secret[i] - '0']++;
gVec[guess[i] - '0']++;
}
for (int i=0; i<10; i++)
b += min(sVec[i], gVec[i]);
return to_string(a) + "A" + to_string(b) + "B";
}
};