解题思路:用一个长度为10的数组来存储数字0-9在两个字符串中出现的状态。如果相同位置的数字也相同,则直接把A的技术增1即可。否则,处理见程序。解释一下,数组一开始所有元素都为0,由于数组中对应位置的值secret只有++的权利,guess只有–的权利,所以如果判断++之后对应位置的元素还是小于等于0,说明该元素在guess中出现过。反之同理。同时两者的++和–也有相互抵消的作用,保证了在一个字符串的一个数字和另一个字符串的多个相同的数字都进行匹配。
public class Solution {
public String getHint(String secret, String guess) {
int countA = 0;
int countB = 0;
int[] count = new int[10];
for (int i = 0; i < secret.length(); i++) {
if (secret.charAt(i) == guess.charAt(i)) {
countA++;
} else {
count[secret.charAt(i) - '0']++;
if (count[secret.charAt(i) - '0'] <= 0) {
countB++;
}
count[guess.charAt(i)- '0']--;
if (count[guess.charAt(i)- '0'] >= 0) {
countB++;
}
}
}
return String.valueOf(countA) + "A" + String.valueOf(countB) + "B";
}
}