アルゴリズム記録
LeetCodeトピック:
あなたは友達とブルズアンドカウズゲームをプレイしています。ゲームのルールは次のとおりです。
-
秘密の番号を書いて、友達にその番号を推測してもらいます。あなたの友人が推測するたびに、あなたは彼に次の情報でヒントを与えます:
-
数字と正確な位置に属する桁数を正しく推測します(「ブル」と呼ばれます)。
-
正しく推測されたが間違った場所にある数に属する桁数(「牛」と呼ばれる、牛)。
秘密の番号の秘密とあなたの友人によって推測された数の推測を与えられて、あなたの友人の推測のためのヒントを返してください。
プロンプトの形式は「xAyB」です。ここで、xは雄牛の数、yは牛の数、Aは雄牛、Bは牛の数です。秘密の番号と友人が推測した番号の両方に重複した番号が含まれている可能性があることに注意してください。
説明する
1.トピック
输入:secret = "1807", guess = "7810"
输出:"1A3B"
解释:数字和位置都对(公牛)用 '|' 连接,数字猜对位置不对(奶牛)的采用斜体加粗标识。
"1807"
|
"7810"
复制代码
2.分析
- 質問は難しいことではありませんが、質問の意味は少し紛らわしいです。一般に、2つの文字列の対応する位置にある同じ要素の数と、対応する等しい以外の同じ要素の数を見つける必要があります。位置。
- また、同じ要素があります。つまり、異なる要素の元の文字列の文字数も維持する必要があります。
class Solution {
public String getHint(String secret, String guess) {
int bulls = 0, cows = 0;
Map<Character, Integer> set = new HashMap();
for(int i = 0; i < secret.length(); i++) {
if(secret.charAt(i) == guess.charAt(i)) continue;
set.put(secret.charAt(i), set.getOrDefault(secret.charAt(i), 0) + 1);
}
for(int i = 0; i < secret.length(); i++) {
if(secret.charAt(i) == guess.charAt(i)) bulls++;
else {
if(set.containsKey(guess.charAt(i)) && set.get(guess.charAt(i)) > 0) {
cows++;
set.put(guess.charAt(i), set.get(guess.charAt(i)) - 1);
}
}
}
return bulls + "A" + cows + "B";
}
}
复制代码
要約する
文字列操作。