Question
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c”
click to show corner cases.
Corner Cases:
Did you consider the case where path = “/../”?
In this case, you should return “/”.
Another corner case is the path might contain multiple slashes ‘/’ together, such as “/home//foo/”.
In this case, you should ignore redundant slashes and return “/home/foo”.
Hide Tags Stack String
My first try
class Solution(object):
def simplifyPath(self, path):
"""
:type path: str
:rtype: str
"""
if path=='':
return ''
path = path.split('/')
vis = [True]*len(path)
for ind in range(len(path)):
if path[ind]=='' or path[ind]=='.':
vis[ind]=False
if path[ind]=='..':
vis[ind]=False
if ind>0:
vis[ind-1] = False
temp = [ path[ind] for ind in range(len(path)) if vis[ind]==True]
temp = '/'.join(temp)
return '/'+temp
Error
Input:
"/a/./b/../../c/"
Output:
"/a/c"
Expected:
"/c"
My Solution
time complexity: O(n)
space complexity: O(n)
class Solution(object):
def simplifyPath(self, path):
"""
:type path: str
:rtype: str
"""
if path=='':
return ''
path = path.split('/')
vis = [True]*len(path)
for ind in range(len(path)):
if path[ind]=='' or path[ind]=='.':
vis[ind]=False
if path[ind]=='..':
vis[ind]=False
for tind in range(ind-1,-1,-1):
if vis[tind]==True:
vis[tind]=False
break
temp = [ path[ind] for ind in range(len(path)) if vis[ind]==True]
temp = '/'.join(temp)
return '/'+temp