生成树字符串
来源:互联网 发布:常用排序算法 编辑:程序博客网 时间:2024/05/19 11:47
输入:
5a v b d e
输出:
a(v,b(d),e)
import java.util.ArrayList;import java.util.Scanner;public class Main { private static class Node { public String value; public int level; } private static Node[] nodes; public static String dfs(int left, int right, int currLevel, String currValue) { int nextLevel = Integer.MAX_VALUE; for (int i = left; i <= right; i++) { if (currLevel < nodes[i].level && nextLevel > nodes[i].level) { nextLevel = nodes[i].level; } } if (nextLevel == Integer.MAX_VALUE || left > right) { return currValue; } ArrayList<Integer> positions = new ArrayList<>(); for (int i = left; i <= right; i++) { if (nextLevel == nodes[i].level) { positions.add(i); } } StringBuilder sb = new StringBuilder(); if (currLevel != -1) { sb.append(currValue).append("("); } for (int i = 0, len = positions.size(); i < len; i++) { int start = positions.get(i), end = right; if (i < len - 1) { end = positions.get(i + 1) - 1; } String nextNodes = dfs(start + 1, end, nodes[start].level, nodes[start].value); if (i == 0) { sb.append(nextNodes); } else { sb.append(",").append(nextNodes); } } if (currLevel != -1) { sb.append(")"); } return sb.toString(); } public static Node parserStr2Node(String s) { int cnt = 0; for (int i = 0, len = s.length(); i < len; i++) { if (s.charAt(i) == ' ') { cnt++; } else { break; } } Node node = new Node(); node.value = s.trim(); node.level = cnt; return node; } public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = Integer.valueOf(cin.nextLine()); nodes = new Node[n]; for (int i = 0; i < n; i++) { nodes[i] = parserStr2Node(cin.nextLine()); } System.out.println(dfs(0, n - 1, -1, "##")); } }}
0 0
- 生成树字符串
- 字符串生成
- 字符串生成
- 生成字符串
- 生成字符串
- 一定规则的字符串生成树结构
- JS读取XML字符串生成树结构
- 生成随机字符串
- ASP生成GUID字符串
- 随机生成字符串
- 生成随机数的字符串
- 随机生成字符串
- 生成一个随机字符串
- 生成参数字符串
- 随机生成字符串
- 如何生成连接字符串
- dom4j-生成XML字符串
- 随机字符串生成
- 微信小程序要这样去解读
- HPUX上的MQ安装
- Android MVP 模式应用实例
- 【tyvj】1030 乳草的入侵 bfs
- LUCENE中的文件操作都是通过这Directory来实现的
- 生成树字符串
- C++Primer(第十一章课后习题程序题源代码)
- 【NOIP1997】骑士游历
- HTTP协议详解
- https原理和tcp握手机制
- 左连接、右连接、内连接、外连接、交叉连接
- qt写的在ok6410上的密码锁
- gdi+(1) 画直线
- NoSQL vs SQL