华为OD机试真题 Java 实现【评论转换输出】【2023 B卷 100分】,附详细解题思路

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 在这里插入图片描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

  • 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。

在这里插入图片描述

一、题目描述

在一个博客网站上,每篇博客都有评论。每一条评论都是一个非空英文字母字符串。

评论具有树状结构,除了根评论外,每个评论都有一个父评论。

当评论保存时,使用以下格式:

  • 首先是评论的内容;
  • 然后是回复当前评论的数量;
  • 最后是当前评论的所有子评论。(子评论使用相同的格式嵌套存储)

所有元素之间都是单个逗号分隔。

例如,如果评论如下图所示:

“小红:你的华为OD专栏写的真好,2,小哪吒:你觉得哪里还不错?,0,小哪吒:还有哪里可以改进?,0”

华为OD机试真题 Java 实现【评论转换输出】【2023 B卷 100分】,附详细解题思路_第1张图片

“小红:你的华为OD专栏写的真好,1,小哪吒:你觉得哪里还不错?还有哪里可以改进?,1,小红:每道题都有解题思路,代码每行都有注释,0”

华为OD机试真题 Java 实现【评论转换输出】【2023 B卷 100分】,附详细解题思路_第2张图片

友情提示:图片只是简单举例,评论要求由英文字母、数字和英文逗号组成。

二、输入描述

输入一行评论,由英文字母、数字和英文逗号组成。

保证每个评论都是由英文字母组成的非空字符串。

每个评论的数量都是整数(至少由一个数字组成)。

整个字符串的长度不超过106。

给定的评论结构保证是合法的。

三、输出描述

按照给定的格式打印评论。对于每一级嵌套,评论应该按照输入中的顺序打印。

四、解题思路

  1. 定义一个内部类Node,属性有评论层数row、评论内容content、评论回复son;
  2. 输入一行评论,由英文字母、数字和英文逗号组成;
  3. 获取当前评论的内容、当前评论有几个回复;
  4. 初始化层数row为1;
  5. 倒序遍历评论的集合;
  6. 如果这个节点还有子节点,那就属于这个节点;
  7. 将此节点添加到评论的集合;
  8. 添加第row层的内容,空格分隔;
  9. 循环输出每层内容,去掉最后一个空格。

五、Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    String[] arr = sc.nextLine().split(",");
    // 评论的集合
    List<Node> nodeList = new ArrayList<>();
    Map<Integer, String> map = new HashMap<>();

    for (int i = 0; i < arr.length; i += 2) {
        // 当前评论的内容
        String content = arr[i];
        // 当前评论有几个回复
        int child = Integer.valueOf(arr[i + 1]);
        // 初始化层数
        int row = 1;

        // 倒序遍历评论的集合
        for (int j = nodeList.size() - 1; j >= 0; j--) {
            Node node = nodeList.get(j);
            if (node.recover != 0) {
                // 如果这个节点还有子节点,那就属于这个节点
                node.recover--;
                row = node.row + 1;
                break;
            }
        }
        
		// 将此节点添加到评论的集合
        Node node = new Node(row, content, child);
        nodeList.add(node);
        // 添加第row层的内容,空格分隔
        map.put(row, map.getOrDefault(row, "") + content + " ");
    }

	// 循环输出每层内容,去掉最后一个空格
    for (String str : map.values()) {
        System.out.println(str.substring(0, str.length() - 1));
    }
}

static class Node {
    // 评论层数
    private int row;
    // 评论内容
    private String content;
    // 评论回复
    private int recover;

    public Node(int row, String content, int recover) {
        this.row = row;
        this.content = content;
        this.recover = recover;
    }
}

六、效果展示

1、输入

nezha,2,i,0,love,0,study,0,java,1,you,1,sb,0

2、输出

nezha study java
i love you
sb

华为OD机试真题 Java 实现【评论转换输出】【2023 B卷 100分】,附详细解题思路_第3张图片


下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,华为,java,程序人生,学习)