一.解法
https://leetcode-cn.com/problems/bulls-and-cows/
要点:hashmap
Python,C++,Java都用了相同的哈希表法。
bulls可以直接遍历一遍求出,并且在这第一次遍历时把secret的每个字母录入到hashmap中,在进行第二次遍历guess字符串,将guess的每个字母发到hashmap中去寻找,找到且hashmap对应的value大于0就将value减1,cows随之加一,最后将cows减去bulls即可(因为重复计算)。
二.Python实现
class Solution:
def getHint(self, secret: str, guess: str) -> str:
if not guess:
return None
dic = {}
bulls = 0
cows = 0
for i in range(len(secret)):
if secret[i]==guess[i]:
bulls +=1
if secret[i] in dic:
dic[secret[i]]+=1
else:
dic[secret[i]]=1
for i in range(len(guess)):
if guess[i] in dic:
if dic[guess[i]]>0:
dic[guess[i]]-=1
cows+=1
cows-=bulls
return str(bulls)+'A'+str(cows)+'B'
三.C++实现
class Solution {
public:
string getHint(string secret, string guess) {
int bulls=0;
int cows=0;
unordered_map<char,int> hashmap;
int length=secret.size();
for(int i=0;i<length;i++){
if(secret[i]==guess[i]) bulls++;
if(hashmap[secret[i]])
hashmap[secret[i]]++;
else hashmap[secret[i]]=1;
}
for(int j=0;j<length;j++){
if(hashmap[guess[j]]>0){
hashmap[guess[j]]--;
cows++;
}
}
cows=cows-bulls;
string answer="";
answer=to_string(bulls) + "A" + to_string(cows) + "B";
return answer;
}
};
四.java实现
class Solution {
public String getHint(String secret, String guess) {
int bulls=0;
int cows=0;
Map<Character,Integer> hashmap=new HashMap<Character,Integer>();
int length=secret.length();
for(int i=0;i<length;i++){
if(secret.charAt(i)==guess.charAt(i)) bulls++;
if(hashmap.containsKey(secret.charAt(i)))
hashmap.put(secret.charAt(i),hashmap.get(secret.charAt(i))+1);
else hashmap.put(secret.charAt(i),1);
}
for(int j=0;j<length;j++){
if(hashmap.containsKey(guess.charAt(j))){
if(hashmap.get(guess.charAt(j))>0){
hashmap.put(guess.charAt(j),hashmap.get(guess.charAt(j))-1);
cows++;
}
}
}
cows=cows-bulls;
String answer="";
answer=bulls+ "A" + cows+ "B";
return answer;
}
};