目录
- 专栏导读
- 一、题目描述
- 在这里插入图片描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、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在线答疑。