问题描述:
原题目过于繁琐难懂,我这边简化解释一下:
两个数组,出现位置相同 且 值相同的数 A++
出现位置不同 但 值相同的数 B++
最后返回几个A几个B
来源:力扣(LeetCode)
链接:力扣
解决思路:
算盘加减法,由于是纯数字组成,直接构建一个虚拟算盘tag
第一个数组遍历到一个数,该数对应的数量记录+1
第二个数组遍历到一个数,该数对应的数量记录-1
再执行这两个操作的时候先判断算盘上的值是否出现过,然后B++
/*
*作者:赵星海
*时间:2021/6/30 11:33
*用途:猜数字游戏
*/
public String getHint(String secret, String guess) {
int G = 0;
int N = 0;
int[] tag = new int[100];//0-9编解码标记
char[] chars = secret.toCharArray();
char[] charsGuess = guess.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == charsGuess[i]) {
G++;
}else {
if (tag[chars[i]]<0){
N++;
}
tag[chars[i]]++; //算盘位置的值++
if (tag[charsGuess[i]]>0){
N++;
}
tag[charsGuess[i]]--; //算盘位置的值--
}
}
return G + "A" + N+ "B";
}
leetCode提交结果: