299.猜数字游戏
题目描述
题解
我们首先先计算公牛的数目,再计算奶牛的数目。
公牛的数目:
奶牛的数目:
- 在这个位置上字符但是不想等,secret有这个字符
代码
class Solution {
public String getHint(String secret, String guess) {
StringBuilder sb = new StringBuilder();
int n = secret.length();
int countA = 0;
int countB = 0;
int[] charCount = new int[128];
for (int i = 0; i < n; i++) {
char ch = secret.charAt(i);
charCount[ch - ' ']++;
}
for (int i = 0; i < n; i++) {
char chSecret = secret.charAt(i);
char chGuess = guess.charAt(i);
if (chGuess == chSecret) {
countA++;
charCount[chGuess - ' ']--;
}
}
for (int i = 0; i < n; i++) {
char chSecret = secret.charAt(i);
char chGuess = guess.charAt(i);
if (chSecret == chGuess) {
continue;
} else {
if (charCount[chGuess - ' '] > 0) {
charCount[chGuess - ' ']--;
countB++;
}
}
}
sb.append(countA);
sb.append("A");
sb.append(countB);
sb.append("B");
return sb.toString();
}
}
我的方法很傻,还是大佬的方法比较机智。 如果奶牛是那种情况,那么把两个字符除了相等的地方进行数字统计的话,那么少的那一部分肯定是两者重合的。那么就可以直接得到而不用去统计原始数据再进行比较了。
宮水三叶题解
class Solution {
public String getHint(String secret, String guess) {
int n = secret.length();
int a = 0, b = 0;
int[] cnt1 = new int[10], cnt2 = new int[10];
for (int i = 0; i < n; i++) {
int c1 = secret.charAt(i) - '0', c2= guess.charAt(i) - '0';
if (c1 == c2) {
a++;
} else {
cnt1[c1]++;
cnt2[c2]++;
}
}
for (int i = 0; i < 10; i++) b += Math.min(cnt1[i], cnt2[i]);
return a + "A" + b + "B";
}
}
作者:AC_OIer
链接:https://leetcode-cn.com/problems/bulls-and-cows/solution/gong-shui-san-xie-jian-dan-mo-ni-ti-by-a-tdhs/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|