Problem
Given an absolute path for a file (Unix-style), simplify it.
For example,
path =
path =
path =
"/home/"
, => "/home"
path =
"/a/./b/../../c/"
, => "/c"
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"
.
Code
string simplifyPath(string path) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. int n = path.size(); int i = 0; deque<string> st; if(path[0] == '/'){ st.push_front("/"); ++i; } while(i < n){ while(i < n && path[i] == '/') ++i; if(i == n) break; int j = i; while(j < n && path[j] != '/') ++j; string folder = path.substr(i,j - i); if(folder == ".."){ if(st.front() != "/") st.pop_front(); } else if(folder != ".") st.push_front(folder); i = j; } string result; while(!st.empty()){ string folder = st.back(); result += folder; st.pop_back(); if((!st.empty()) && (folder != "/")) result += '/'; } return result; }
No comments:
Post a Comment