思路:
用哈希表来存储guess中的字符和对应的次数,数组vec(2)用来存储猜中次数和伪猜中次数,total用来存储总猜中次数,即总猜中次数=猜中次数+为猜中次数。
遍历字符串guess存入后,再遍历字符串solution,如果guess[i]==solution[i],说明该字符猜中了,vec[0]++,如果un_map[solution[i]]!=0,total++;并且要使哈希表中的un_map[solution[i]]--。
最后用总次数减去猜中才是就是伪猜中次数。
代码:
class Solution {
public:
vector<int> masterMind(string solution, string guess) {
vector<int> vec(2);//用来存放猜中次数和伪猜中次数的数组
int total=0;// 用来记录猜中的总次数,及猜中次数和伪猜中次数之和
unordered_map<char,int> un_map;//创建哈希表键和值分别用来存储guess中的字符和对应的数量
for(int i=0;i<guess.size();i++){//将guess中的字符和次数添加到哈希表中
un_map[guess[i]]++;
}
for(int i=0;i<solution.size();i++){//遍历solution
if(guess[i]==solution[i]){
vec[0]++;//猜中
}
if(un_map[solution[i]]){
total++;//总的猜中次数
un_map[solution[i]]--;//在哈希表中减去比较了的元素,防止重复比较
}
}
vec[1]=total-vec[0];//伪猜中次数=总次数-猜中次数
return vec;
}
};