Longest Absolute File Path思路:非常恶心的题目,测试样例提供一个不从某个目录开始,而是从多个目录开始的样例。。题目很简单,注意各种奇怪的案例即可。
GitHub地址:https://github.com/corpsepiges/leetcode
<span style="font-size:12px;">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;
}
}</span>