ファイル(Unix形式)のための絶対パスを考えると、それを簡素化します。換言すれば、正規のパスに変換します。
UNIX形式のファイルシステムでは、期間は .
、現在のディレクトリを参照します。さらに、二重の期間は ..
レベルアップしたディレクトリに移動します。詳細については、以下を参照してください。 LINUX / UNIXでの相対パスVS絶対パスを
返された正規のパスは常にスラッシュで始まらなければならないことに注意してください /
、とだけ単一のスラッシュがなければならない /
2つのディレクトリ名の間。最後のディレクトリ名は(存在する場合)、末尾で終わっていなければなりません /
。また、正規のパスは、絶対パスを表すshorteststringでなければなりません。
例1:
入力:「/ホーム/」 出力:「/ホーム」 説明:最後のディレクトリ名の後に末尾のスラッシュがないことに注意してください。
例2:
入力:「/../」 出力:「/」 説明:ルートディレクトリから1つのレベル上を行くにはありませんルートレベルは、あなたが行くことができる最高レベルであるとして、-OP。
例3:
入力:「/ホーム// fooの/」 出力:「/ホーム/ foo」という 説明:正規のパスでは、複数の連続するスラッシュは単一のものに置き換えられています。
例4:
入力: "/a/./b/../../c/"
出力: "/ C"
問題の意味
条件が発生しました。「」直接削除、遭遇した「簡単にするために、」..その上に次のパスの後にパスを削除します
考え
実際の業界のトピックに非常に近いです
入力することで/シミュレートされたスタックがで「..「」状況をと」会っ用いて分離
コード
1 パブリック クラス_71_SimplifyPath { 2 公共文字simplifyPath(文字列のパス){ 3 // コーナーケース 4 もし(path.length()<= 1)リターンパス。 5 // スプリットinoutの 6 文字列[]入力= path.split( "/" )。 7 スタックの<string>スタック= 新しいスタック<> (); 8 用(文字列S:入力){ 9 であれば(s.equals( ".." )){ 10 であれば(!stack.empty()){ 11 stack.pop(); 12 } 13 } そう であれば(s.equals()&& ""!s.isEmpty()){ 14 stack.push(S); 15 } 16 } 17 文字列結果= "" ; 18 であれば(stack.isEmpty())リターン "/" 。 19 ながら(!stack.empty()){ 20 列CUR = stack.pop()。 21 結果= "/" + + CUR 結果を、 22 } 23 リターン結果。 24 } 25 }