解题思路

这是一道字符串处理问题,需要从树形结构中提取节点名称。主要思路如下:

  1. 字符串解析规则:

    • 节点名称在单引号内
    • 遇到'['表示开始一个新的子节点列表
    • 按顺序收集所有节点名称
  2. 输出格式要求:

    • 使用方括号包围
    • 每个节点名用双引号包围
    • 节点间用逗号分隔
    • 保持节点出现的顺序

代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    vector<string> nodes;
    char ch;
    string temp;
    
    // 解析输入字符串
    while((ch = getchar()) != '\n') {
        if(ch == '\'') {
            temp = "";
            // 读取单引号内的节点名
            while((ch = getchar()) != '\'') {
                temp += ch;
            }
        }
        // 遇到'['时保存前一个节点名
        if(ch == '[') {
            if(!temp.empty()) {
                nodes.push_back(temp);
            }
        }
    }
    
    // 格式化输出
    cout << '[';
    if(nodes.empty()) {
        cout << ']' << endl;
        return 0;
    }
    
    // 输出除最后一个节点外的所有节点
    for(int i = 0; i < nodes.size()-1; i++) {
        cout << '"' << nodes[i] << '"' << ',';
    }
    // 输出最后一个节点
    cout << '"' << nodes.back() << "\"]" << endl;
    
    return 0;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] sp = bf.readLine().split(",");
        ArrayList<String>al = new ArrayList<>();
        for (int i = 0; i < sp.length; i++) {
            if (sp[i].contains("[")) {
                String s = sp[i - 1];
                String[] t = s.split(" ");
                String st = t[t.length - 1].substring(1, t[t.length - 1].length() - 1);
                al.add("\"" + st + "\"");
            }
        }
        System.out.print("[");
        for (int i = 0; i < al.size(); i++) {
            System.out.print(al.get(i));
            if (i != al.size() - 1)System.out.print(",");
        }
        System.out.print("]");
    }
}
sp = list(input().split(","))
al = []
for i in range(len(sp)):
    if "[" in sp[i]:
        s = sp[i - 1]
        t = s.split(" ")
        tt = t
        t = []
        for j in range(len(tt)):
            if tt[j] != "":
                t.append(tt[j])
        st = t[len(t) - 1][1:]
        while st[0] == "'":
            st = st[1:]
        while st[-1] == "'":
            st = st[:-1]
        al.append("\"" + st + "\"")

print("[", end="")
for i in range(len(al)):
    print(al[i], end="")
    if i != len(al) - 1:
        print(",", end="")
print("]")

算法及复杂度

  • 算法:字符串解析
  • 时间复杂度: - 为输入字符串长度
  • 空间复杂度: - 为节点数量