0

ディレクトリ ツリーを処理し、そのツリー内の長さの最小パスと最大パスを見つけるときに問題が発生しています。問題はこれです:

ディレクトリ名とファイル名の文字列が与えられ、"-" の数がすべてのディレクトリ間の関係 (ディレクトリ内にどのファイルとディレクトリがあるかなど) を示している場合、パスの長さの最小値と最大値を見つけます。

たとえば、次の内容の文字列です。

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」は明らかに最長のパスです (文字列の長さで測定)。

私の仕事から、これはツリーの問題、特にディレクトリ ツリーの問題であることがわかりました。だから、私は2つの再帰的な方法を試していました.1つは最大値を見つけ、もう1つは最小値を見つけます。

しかし、私はその方法を完全に理解することはできません。「-」を使用して、どのディレクトリ/ファイルがどのディレクトリにあるかを判断すると、混乱します。基本的なツリー構造も実装しています (以下のコードを参照)。文字列を指定してツリーを構築するにはどうすればよいですか? ツリーを構築してからトラバースすることを心配する必要はありません。代わりに、ツリー構造を使用せずに最小値と最大値を見つけようとする必要がありますか?

ツリー コード:

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;
    }
}
4

1 に答える 1

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)));


}
于 2015-11-15T02:04:54.220 に答える