絶対パスを与えるために、Unixスタイルのファイル、あなたはそれを単純化する必要があります。換言すれば、パス指定に変換します。
Unix形式のファイルシステムでは、ドットは、カレントディレクトリ自体を表す(。);また、2つのドット(..)は、(親ディレクトリ)にディレクトリを表し、比較的複雑な経路であってもよい両方とも一部。詳細については、以下を参照してください。相対パス対のLinux / Unixの絶対パスを
仕様は、/常に先頭に/スラッシュでパスに戻らなければならない、と2つのスラッシュの間だけ1つのディレクトリ名を持たなければならないことに注意してください。(があれば)最後に、ディレクトリ名は/で終わるわけで。また、仕様は、絶対パス文字列でなければならない最短経路を表します。
例1:
入力:「/ホーム/」
出力:「/ホーム」
の説明:最後のスラッシュの後にはディレクトリ名が存在しないことを注意を。
例2:
入力:「/../」
出力:「/」を
説明:上向きのルートレベルからのルートは、あなたが到達できる最高レベルであるため、現実的ではありません。
例3:
入力:「/ホーム// fooの/」
出力:「/ホーム/ foo」という
説明:仕様路には、連続したスラッシュスラッシュの必要性を交換する複数の。
例4:
入力: "/ A /./ B /../../ C /"
出力: "/ C"
実施例5:
入力: "/ A /../../ B /../ C //.//"
出力: "/ C"
実施例6:
入力: "/ A // B //// C / D //./.// .."
出力: "/ A / B / C "
アイデア:ポップアップする。..会った、スタックの記録と、すべての名前をコードを参照してください、あなたは言葉プッシュが発生し、最後に「/」を追加します
class Solution {
public String simplifyPath(String path) {
Deque<String> stack = new LinkedList<>();
for (String item : path.split("/")) {
if (item.equals("..")) {
if (!stack.isEmpty()) stack.pop();
} else if (!item.isEmpty() && !item.equals(".")) stack.push(item);
}
String res = "";
for (String d : stack) res = "/" + d + res;
if(res.equals("")) return "/";
return res;
}
}