• LeetCode_299_猜数字游戏


    题目链接

    题目描述

    你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:

    写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:

    • 猜测数字中有多少位属于数字和确切位置都猜对了(称为 “Bulls”,公牛),
    • 有多少位属于数字猜对了但是位置不对(称为 “Cows”,奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。

    给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。

    提示的格式为 “xAyB” ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。

    请注意秘密数字和朋友猜测的数字都可能含有重复数字。

    示例 1

    输入:secret = "1807", guess = "7810"
    输出:"1A3B"
    解释:数字和位置都对(公牛)用 '|' 连接,数字猜对位置不对(奶牛)的采用斜体加粗标识。
    "1807"
      |
    "7810"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例 2

    输入:secret = "1123", guess = "0111"
    输出:"1A1B"
    解释:数字和位置都对(公牛)用 '|' 连接,数字猜对位置不对(奶牛)的采用斜体加粗标识。
    "1123"        "1123"
      |      or     |
    "0111"        "0111"
    注意,两个不匹配的 1 中,只有一个会算作奶牛(数字猜对位置不对)。通过重新排列非公牛数字,其中仅有一个 1 可以成为公牛数字。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    提示

    • 1 <= secret.length, guess.length <= 1000
    • secret.length == guess.length
    • secretguess 仅由数字组成

    解题思路

    遍历+统计

    • 对于公牛,需要数字和位置都一样,只要遍历secret和guess,找到secret.charAt(i) == guess.charAt(i)的数量即可
    • 对于奶牛,只需要统计sercet和guess中各个字符出现的次数,然后取相同字符的最小值累加,然后再减去公牛的数量即可

    AC代码

    class Solution {
        public String getHint(String secret, String guess) {
            int len = secret.length();
            int correct = 0;
            int justSame = 0;
            int[] recordS = new int[10];
            int[] recordG = new int[10];
            for (int i = 0; i < len; i++) {
                char s = secret.charAt(i);
                char g = guess.charAt(i);
                if (s == g) {
                    correct++;
                }
                recordS[s - '0']++;
                recordG[g - '0']++;
            }
            justSame += Math.min(recordS[0], recordG[0]);
            for (int i = 1; i <= 9; i++) {
                justSame += Math.min(recordS[i], recordG[i]);
            }
            return correct + "A" + (justSame - correct) + "B";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    Vue3项目创建+组合式API使用+组件通信+渲染微博热搜+打包上线
    linux之alias别名
    JVM概述及类加载器
    图的若干定义及表示
    AOP中5种通知的注解
    Linux系统——Session ID(负载均衡如何保持会话)
    第四章-并发与同步思考题
    C盘如何扩容
    SpringCloud学习笔记 - 消息总线 - Spring Cloud Bus
    几个常用的nosql数据库的操作方式
  • 原文地址:https://blog.csdn.net/Fitz1318/article/details/126154109