-
Notifications
You must be signed in to change notification settings - Fork 34
/
Solution.java
75 lines (73 loc) · 2.43 KB
/
Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class Solution {
private class NodeFile {
String name;
List<NodeFile> list;
int max=0;
public NodeFile(String name) {
this.name = name;
this.list = new ArrayList<NodeFile>();
this.max=name.contains(".")?name.length():0;
}
}
public int lengthLongestPath(String input) {
int max=0;
String[] strs=input.split("\n");
StringBuffer sb=new StringBuffer(strs[0]);
for (int i = 1; i < strs.length; i++) {
if (strs[i].substring(0,1).equals("\t")||(strs[i].length()>4&&strs[i].substring(0,4).equals(" "))) {
sb.append('\n'+strs[i]);
}else{
NodeFile node=structureTreeFile(sb.toString());
if (node.max>max) {
max=node.max;
}
sb=new StringBuffer(strs[i]);
}
}
NodeFile node=structureTreeFile(sb.toString());
if (node.max>max) {
max=node.max;
}
return max;
}
public NodeFile structureTreeFile(String input) {
if (input.length() > 0) {
String[] strs = input.split("\n");
StringBuffer sb = new StringBuffer();
NodeFile ans = new NodeFile(strs[0]);
int otherMax=0;
for (int i = 1; i < strs.length; i++) {
String s=strs[i];
if (s.length()>4&&s.substring(0,4).equals(" ")) {
s=s.substring(4);
}else{
s=s.substring(1);
}
if (s.contains("\t")) {
sb.append("\n"+s);
} else {
NodeFile node = structureTreeFile(sb.toString());
if (node != null) {
ans.list.add(node);
if (node.max>otherMax) {
otherMax=node.max;
}
}
sb = new StringBuffer(s);
}
}
NodeFile node = structureTreeFile(sb.toString());
if (node != null) {
ans.list.add(node);
if (node.max>otherMax) {
otherMax=node.max;
}
}
if (otherMax!=0) {
ans.max=ans.name.length()+1+otherMax;
}
return ans;
}
return null;
}
}