71.簡素化パス
中
ファイル(Unix形式)のための絶対パスを考えると、それを簡素化します。換言すれば、正規のパスに変換します。
UNIX形式のファイルシステムでは、期間は .
、現在のディレクトリを参照します。さらに、二重の期間は ..
レベルアップしたディレクトリに移動します。詳細については、以下を参照してください。 LINUX / UNIXでの相対パスVS絶対パスを
返された正規のパスは常にスラッシュで始まらなければならないことに注意してください /
、とだけ単一のスラッシュがなければならない /
2つのディレクトリ名の間。最後のディレクトリ名は(存在する場合)、末尾で終わっていなければなりません /
。また、正規のパスは、絶対パスを表す最短の文字列でなければなりません。
例1:
入力:「/ホーム/」
出力:「/ホーム」
説明:最後のディレクトリ名の後に末尾のスラッシュがないことに注意してください。
例2:
入力:「/../」
出力:「/」
説明:ルートレベルは、あなたが行くことができる最高レベルであるように、rootディレクトリから1つのレベル上を行くには、何もしません。
例3:
入力:「/ホーム// fooの/」
出力:「/ホーム/ foo」という
説明:正規のパスでは、複数の連続するスラッシュは単一のものに置き換えられています。
例4:
入力: " /a/./b/../../c/"
出力: " / C"
例5:
入力: " /a/../../b/../c//.//"
出力: " / C"
例6:
INPUT: " /a//b////c/d//./.// .."
出力: " / A / B / C"
のルールを明確にするには短い、経験では、重要です現在の層の代表的な、無視。...床に、スタックがクリアされた、残りの文字は通常のパスですが、持つようになった/ミドル/唯一の
Pythonの問題自分で授業のないパッケージがこれを達成しないようにということです、また、Pythonでセグメンテーション/機能を実現
クラス溶液(オブジェクト): DEF :simplifyPath(自己、パス) "" " :タイプパス:STR :RTYPE:STR """ #スタック定義 スタック= リスト() #の分割文字列 パス= [P のための P で path.split (' / ')であればP] 用のp におけるパス: もし P == ' 。' : 継続 ELIFの == Pを' .. ": もしスタック: stack.pop() 他: stack.append(P) リターン ' / ' + ' / ' .join(スタック) ソル = ソリューション() パス = " /a/./b/../ .. / C / 「 プリント(Solu.simplifyPath(パス))
ボーナス:
1.複数/状況が分割部門の直接の使用は、判決文で、解決策があり、空の文字列につながる、発生があるかもしれません。サイクル内で直接にスタックに追加
2。
Pythonはjoin()メソッドは、新しい文字列を生成するために接続されたシーケンスの要素を指定するために使用されます。
文法
()メソッドの構文に参加します:
STR 。参加する(シーケンス)