
 
目录
- 专栏导读
 - 一、题目描述
 - 在这里插入图片描述
 - 二、输入描述
 - 三、输出描述
 - 四、解题思路
 - 五、Java算法源码
 - 六、效果展示
 - 1、输入
 - 2、输出
 
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。
- 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。
 

一、题目描述
在一个博客网站上,每篇博客都有评论。每一条评论都是一个非空英文字母字符串。
评论具有树状结构,除了根评论外,每个评论都有一个父评论。
当评论保存时,使用以下格式:
- 首先是评论的内容;
 - 然后是回复当前评论的数量;
 - 最后是当前评论的所有子评论。(子评论使用相同的格式嵌套存储)
 
所有元素之间都是单个逗号分隔。
例如,如果评论如下图所示:
“小红:你的华为OD专栏写的真好,2,小哪吒:你觉得哪里还不错?,0,小哪吒:还有哪里可以改进?,0”
“小红:你的华为OD专栏写的真好,1,小哪吒:你觉得哪里还不错?还有哪里可以改进?,1,小红:每道题都有解题思路,代码每行都有注释,0”

友情提示:图片只是简单举例,评论要求由英文字母、数字和英文逗号组成。
二、输入描述
输入一行评论,由英文字母、数字和英文逗号组成。
保证每个评论都是由英文字母组成的非空字符串。
每个评论的数量都是整数(至少由一个数字组成)。
整个字符串的长度不超过106。
给定的评论结构保证是合法的。
三、输出描述
按照给定的格式打印评论。对于每一级嵌套,评论应该按照输入中的顺序打印。
四、解题思路
- 定义一个内部类Node,属性有评论层数row、评论内容content、评论回复son;
 - 输入一行评论,由英文字母、数字和英文逗号组成;
 - 获取当前评论的内容、当前评论有几个回复;
 - 初始化层数row为1;
 - 倒序遍历评论的集合;
 - 如果这个节点还有子节点,那就属于这个节点;
 - 将此节点添加到评论的集合;
 - 添加第row层的内容,空格分隔;
 - 循环输出每层内容,去掉最后一个空格。
 
五、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 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。




















