我遇到一个问题,处理目录树并找到该树中最小和最大的长度路径。问题是:
给定一串目录和文件名,其中“ - ”表示所有目录之间的关系(例如哪些文件和目录在目录中),找到最小和最大路径长度。
例如,具有以下内容的字符串:
dir1
-file1
-file2
-innerDir1
--file11
--file12
--file13
--innerinnerDir1
---file111
-innerDir2
--file21
表明file1,file2,innderDir1和innderDir2都在目录dir1中。 file11,file12,file13和innerinnerDir1都在innderDir1目录中。
文件路径“dir1 /”显然是最短路径,其中“dir1 / innerDir1 / innerinnerDir1 / file111”显然是最长的路径(通过字符串的长度来衡量)。
从我的工作中,我了解这是一个树问题,特别是目录树问题。所以,我尝试了两种递归方法:一种找到最大值,一种找到最小值。
然而,我无法弄清楚如何。让“ - ”确定哪些目录/文件在哪个目录中让我感到困惑。我还实现了一个基本的树结构(见下面的代码)。如何在给定字符串的情况下构建树?我不应该担心构建树然后遍历它,而只是尝试在不使用树结构的情况下找到最小值和最大值吗?
树代码:
public class Tree<T> {
private Node<T> root;
public Tree(T rootData) {
root = new Node<T>();
root.data = rootData;
root.children = new ArrayList<Node<T>>();
}
public static class Node<T> {
private T data;
private Node<T> parent;
private List<Node<T>> children;
}
}
答案 0 :(得分:0)
public void doit(){
String data = "dir1-file1-file2-innerDir1--file11
--file12--file13--innerinnerDir1---file111-innerDir2--file21";
System.out.println("Smallest -> " + findSmallest(data));
System.out.println("Largest -> " + findLargest(data));
}
public String findSmallest(String data){
return new StringTokenizer(data,"-").nextToken();
}
public String getDelimiter(int value){
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < value; i++){
sb.append("-");
}
return sb.toString();
}
public String findLargest(String data){
int depth = 0;
while (data.indexOf(getDelimiter(++depth)) != -1);
depth-=1;
String value = data.substring(data.indexOf(getDelimiter(depth)) + depth);
return value.substring(0, value.indexOf(getDelimiter(1)));
}