这也是一道很老的题目。没什么取巧的。低级一点就是哈希表的基本运用,高级一点(也到不了哪儿去)就造一个大小为10的数组去做统计。具体就不说了,非常简单的一题,都不太值得medium.
这是HashMap的做法。
public String getHint(String secret, String guess) {
char[] sArr = secret.toCharArray();
char[] gArr = guess.toCharArray();
int bullCnt = 0;
int cowCnt = 0;
HashMap<Character, Integer> sMap = new HashMap<>();
HashMap<Character, Integer> gMap = new HashMap<>();
for (int i = 0; i < Math.max(sArr.length, gArr.length); i++) {
Character sCh = null;
Character gCh = null;
if (i < sArr.length) {
sCh = sArr[i];
}
if (i < gArr.length) {
gCh = gArr[i];
}
if (sCh == gCh) {
bullCnt++;
} else {
if (sCh != null) sMap.put(sCh, sMap.getOrDefault(sCh, 0) + 1);
if (gCh != null) gMap.put(gCh, gMap.getOrDefault(gCh, 0) + 1);
}
}
for (Character c : sMap.keySet()) {
if (gMap.containsKey(c)) {
cowCnt += Math.min(sMap.get(c), gMap.get(c));
}
}
return bullCnt + "A" + cowCnt + "B";
}
这是int数组的做法
public String getHint(String secret, String guess) {
char[] sArr = secret.toCharArray();
char[] gArr = guess.toCharArray();
int bullCnt = 0;
int cowCnt = 0;
int[] sChCnt = new int[10];
int[] gChCnt = new int[10];
for (int i = 0; i < sArr.length; i++) {
if (sArr[i] == gArr[i]) {
bullCnt++;
} else {
int sChIdx = sArr[i] - '0';
int gChIdx = gArr[i] - '0';
if (sChCnt[sChIdx] < gChCnt[sChIdx]) cowCnt++;
if (gChCnt[gChIdx] < sChCnt[gChIdx]) cowCnt++;
sChCnt[sChIdx]++;
gChCnt[gChIdx]++;
}
}
return bullCnt + "A" + cowCnt + "B";
}