解题思路
这是一道字符串处理问题,需要从树形结构中提取节点名称。主要思路如下:
-
字符串解析规则:
- 节点名称在单引号内
- 遇到'['表示开始一个新的子节点列表
- 按顺序收集所有节点名称
-
输出格式要求:
- 使用方括号包围
- 每个节点名用双引号包围
- 节点间用逗号分隔
- 保持节点出现的顺序
代码
#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("]")
算法及复杂度
- 算法:字符串解析
- 时间复杂度:
-
为输入字符串长度
- 空间复杂度:
-
为节点数量