问题描述:这里写链接内容
问题分析:这道题看起来很唬人,其实就是遍历两个字符串,看在某个位置是否相等,如果相等,就A++;如果不相等,就把secret中的字符和guess中的字符再分别存起来;然后再遍历第二遍,第二遍的遍历就是,经过处理的guess字符,会不会在经过处理的secrets的字符里面。如果在,就B++,表明只是放错了位置而已。
public class Solution {
public String getHint(String secret, String guess) {
char[] secrets = secret.toCharArray();
char[] guesses = guess.toCharArray();
HashMap<Character,Integer> maps = new HashMap<>();
List<Character> postDealList = new LinkedList<>();
int As = 0,Bs = 0;
for(int i = 0;i<secrets.length;i++){
if(secrets[i] == guesses[i])
As++;
else{
if(!maps.containsKey(secrets[i]))
maps.put(secrets[i],0);
maps.replace(secrets[i],maps.get(secrets[i])+1);
postDealList.add(guesses[i]);
}
}
int size = postDealList.size();
for(int i = 0;i<size;i++){
char guessChar = postDealList.get(i);
if(maps.containsKey(guessChar)){
int val = maps.get(guessChar);
Bs++;
if(val - 1 == 0)
maps.remove(guessChar);
else
maps.replace(guessChar,val-1);
}
}
return String.valueOf(As)+"A"+String.valueOf(Bs)+"B";
}
}