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
ご不明な点がございましたら、ご指摘いただければ幸いです。 ! !