0%

leetCode-299:Bulls and Cows

问题描述

给出两个由数字组成的相等长度的字符串,要求找出两个字符串相同位置字符相同的个数,以及第二个字符串中在第一个字符串中出现的字符非相同位置字符的个数。题目链接:**点我**

样例输入输出

输入:secret = “1807”, guess = “7810”

输出:”1A3B”

解释:第二个位置相同,数字为 8,其他的数字均在两个字符串中出现,总共 3 个

输入:secret = “1123”, guess = “0111”

输出:”1A1B”

解释:第二个位置相同,数字为 1,剩下 1、3、4位置中,数字为 1 同时存在两个字符串,所以数量为 1

问题解法

此题比较简单,直接按照题意进行模拟即可。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public String getHint(String secret, String guess) {
Map<Integer, Set<Integer>> map = new HashMap<>();
for (int i = 0; i < secret.length(); i++) {
Integer num = secret.charAt(i) - '0';
map.computeIfAbsent(num, key -> new HashSet<>()).add(i);
}

int bullsCount = 0;
int[] nums = new int[10];
for (int i = 0; i < guess.length(); i++) {
Integer num = guess.charAt(i) - '0';
Set<Integer> set = map.get(num);
if (set == null) {
continue;
}

if (set.contains(i)) {
bullsCount++;
set.remove(i);
} else {
nums[num]++;
}
}

int cowsCount = 0;
for (int i = 0; i <= 9; i++) {
cowsCount += Math.min(map.getOrDefault(i, new HashSet<>()).size(), nums[i]);
}

return bullsCount + "A" + cowsCount + "B";
}
}