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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353306.html
標籤:其他
上一篇:線性列舉例題(二)
