Leetcode 71:パスを簡素化します(最も詳細なソリューション!!!)



Leetcode 71 Simplify Path Most Detailed Solution



ドキュメントのフルパス(Unixスタイル)を前提として、パスを単純化してください。

例えば、
= '/home/'、=> '/home'
= '/a/./b/../../c/'、=> '/c'



境界条件:

  • パス= '/../'を検討しましたか場合?
    この場合、戻る必要があります'/'
  • さらに、パスには複数のスラッシュが含まれる場合もあります'/''/home//foo/'など。
    この場合、余分なスラッシュを無視して、'/home/foo'を返すことができます。 。

問題解決のアイデア



アイデアiは非常に単純です。まず、path.split('/')文字列を切り取って判断しますpath.split('/')各要素で。場合=='.'、私たちは次のものを判断し続けます。 case =='..'、we len(stack) != 0の場合、要素がポップアップします。それ以外の場合は、この要素をstack inに追加します。

class Solution: def simplifyPath(self, path): ''' :type path: str :rtype: str ''' stack = list() path = [p for p in path.split('/') if p] for f in path: if f == '.': continue elif f == '..': if stack: stack.pop() else: stack.append(f) return '/'+'/'.join(stack)

それからここに問題があります、私たちは入っていますc++入っていませんsplitどうすればいいですか?合格stringstreamこの操作をシミュレートできます。具体的な方法は次のとおりです。

string tmp stringstream s(path) while (getline(s, tmp, '/')){}

ここで注意すべきことの1つは、c++ For Empty string判断はtrueであるということです。



1つpythonic書き込み

class Solution: def simplifyPath(self, path): ''' :type path: str :rtype: str ''' import os.path return os.path.abspath(path)

質問の他の言語バージョンを自分に追加しました GitHub Leetcode

ご不明な点がございましたら、ご指摘いただければ幸いです。 ! !