leetcode每日一题-299:猜数字游戏
Posted 苦泉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode每日一题-299:猜数字游戏相关的知识,希望对你有一定的参考价值。
leetcode每日一题-299:猜数字游戏
链接
猜数字游戏
题目
分析
虽然是一个中等题,但是其实十分的简单.我们只需要先按照最小长度遍历一遍两个字符串的前缀,然后统计一下同位置并且数字相同的结果,然后把这些点标记一下,然后将secret
中没有匹配的加入哈希表,遍历guess
来统计一下不同位置数字相同的答案即可.
代码
C++
class Solution {
public:
string getHint(string secret, string guess) {
int a = 0, b = 0;
unordered_map<int, int> m;
// 按最小长度遍历
for(int i=0 ; i<min(secret.size(), guess.size()) ; i++)
{
// 统计位置相同且数字相同的答案数
if(secret[i] == guess[i])
{
a++;
// 标记一下,表示已经用过了
secret[i] = guess[i] = 'x';
}
}
// 将剩余的存入哈希表
for(auto& ch : secret)
{
// 用过的不要存了
if(ch != 'x') m[ch - '0']++;
}
// 寻找错位的数字
for(auto& ch : guess)
{
if(ch != 'x')
{
int x = ch - '0';
// 如果有匹配的
if(m[x] > 0)
{
b++;
// 当前数字-1
m[x]--;
}
}
}
// 字符串拼接答案
return to_string(a) + "A" + to_string(b) + "B";
}
};
Java
class Solution {
public String getHint(String secret, String guess) {
int bulls = 0;
int[] cntS = new int[10];
int[] cntG = new int[10];
for (int i = 0; i < secret.length(); ++i) {
if (secret.charAt(i) == guess.charAt(i)) {
++bulls;
} else {
++cntS[secret.charAt(i) - '0'];
++cntG[guess.charAt(i) - '0'];
}
}
int cows = 0;
for (int i = 0; i < 10; ++i) {
cows += Math.min(cntS[i], cntG[i]);
}
return Integer.toString(bulls) + "A" + Integer.toString(cows) + "B";
}
}
作者:LeetCode-Solution
以上是关于leetcode每日一题-299:猜数字游戏的主要内容,如果未能解决你的问题,请参考以下文章