做车展招商的网站,app线上推广是什么工作,网站调用flash,专业微网站开发题目 在一个博客网站上#xff0c;每篇博客都有评论。每一条评论都是一个非空英文字母字符串。评论具有树状结构#xff0c;除了根评论外#xff0c;每个评论都有一个父评论。 当评论保存时#xff0c;使用以下格式: 首先是评论的内容; 然后是回复当前评论的数量。 最后是当…题目 在一个博客网站上每篇博客都有评论。每一条评论都是一个非空英文字母字符串。评论具有树状结构除了根评论外每个评论都有一个父评论。 当评论保存时使用以下格式: 首先是评论的内容; 然后是回复当前评论的数量。 最后是当前评论的所有子评论。(子评论使用相同的格式嵌套存储) 例如: 第—条评论是hello,2,ok,0,bye,0 , 第二条评论是test,0 , 第三条评论是one,1 ,two,1,a,0 所有评论被保存成hello,2,ok,0,bye,0,test,0,one,1,two,1,a,0。对于上述格式的评论请以另外—种格式打印: 首先打印评论嵌套的最大深度。 然后是打印n行第(1in)行对应于嵌套级别为i的评论(根评论的嵌套级别为1)。按照它们出现的顺序打印用空格分隔开。 输入描述: 1行评论。由英文字母、数字和英文逗号组成。保证每个评论都是由英文字符组成的非空字符串。每个评论的数量都是整数(至少由一个数字组成)。整个字符串的长度不超过106.给定的评论结构保证是合法的。 输出描述 按照给定的格式打印评论。对于每一级嵌套评论应该按照输入中的顺序打印 示例1 输入: hello,2,ok,0,bye,0,test,0,one,1,two,1,a,0 输出: 3 hello test one ok bye two a 说明: 如下图所示最大嵌套级别为3。嵌套级别为1的评论是hello test one”嵌套级别为2的评论是ok bye two嵌套级别为3的评论为a。 示例2 输入: A,5,A,0,a,0,A,0,a,0,A,0 输出: 2 A A a A a A 说明: 如下图所示最大嵌套级别为2嵌套级别为1的评论是A嵌套级别为2的评论是A a A a A 示例3 输入: A,3,B,2,C,0,D,1,E,0,F,1,G,0,H,1,I,1,J,0,K,1,L,0,M,2,N,0,O,1,P,0 输出: 4 A K M B F H L N O C D G I P E J 说明: 如下图所示。 思路
这道题还是有难度对递归不太好想 首先将字符串以逗号分割得到字符数组arrs,将arrs转为两个子数组分别存放字符串和数字以chars,nums表示考虑设计递归函数从题目中可以提取两个关键变量遍历arrs的索引idx和chars,nums中的idx/2位置对应以及当前层级level。其中索引是从0到arrs.length-1level可能在回溯中会在01234…这些数反复出现所以可以将level设计到递归函数里面将idx放到最外层的静态变量。即递归函数的形式为dfs(level,chars,nums)对于dfs里面应该先将当前位置的值chars[idx/2]存入当前level的结果中然后根据nums[idx/2]判断当前有几个子评论循环调用dfs函数这时的level应该是当前level1即dfs(level1,chars,nums)。如果nums[idx/2]0那么就是递归调用0次也就结束了当前递归每次确定存放了一个level的结果后idx要加2即idx始终会变大判断子评论数量用的是nums[idx/2]为了避免idx变大对子评论数量的影响应该先将值存下来用于for循环再将idx增大。最后将结果存入List String res中即可level为0则存放0位置level为1则存放1位置。因为根据实际肯定是先有0位置才有1位置输入是先有父评论再有子评论比如res中已经存放了2级评论当出现3级评论时此时在res中找不到2的索引但是res的size一定为2(已经存放过1级和2级评论)因此可以直接把此时结果存入res存入后res最后一位的索引就为2即代表3级评论。 题解
package hwod;import java.util.*;public class CommentInput {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();ListString res commentInput(str);System.out.println(res.size());for (int i 0; i res.size(); i) {System.out.println(res.get(i));}}private static ListString res new ArrayList();private static int idx 0;private static ListString commentInput(String str) {//将字符串分割为字符串和数字两部分String[] arrs str.split(,);String[] chars new String[arrs.length / 2];int[] nums new int[arrs.length / 2];for (int i 0; i chars.length; i) {chars[i] arrs[i * 2];nums[i] Integer.parseInt(arrs[2 * i 1]);}int level 0;while (idx ! arrs.length) {dfs(level, chars, nums);}return res;}private static void dfs(int level, String[] chars, int[] nums) {if (res.size() level) {res.set(level, res.get(level) chars[idx / 2]);} else {res.add(chars[idx / 2]);}int num nums[idx / 2];idx 2;for (int i 0; i num; i) {dfs(level 1, chars, nums);}}
}
推荐
如果你对本系列的其他题目感兴趣可以参考华为OD机试真题及题解JAVA查看当前专栏更新的所有题目。