題目來源
猜數字的游戲,然后我做的時候想的是用哈希,遍歷兩遍,第一遍記錄下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";
}
};