71.簡化路徑
阿新 • • 發佈:2019-01-02
Simplify Path
問題描述:
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c”
測試程式碼(c++):
class Solution {
public:
string simplifyPath(string path) {
vector<string> st;
vector<string> nodes;
string result;
split(path, '/', nodes);
for(auto node : nodes) {
//empty or only '.' path no change
if(node == "" || node == ".") continue;
//go back to the upper directory
if(node == ".." && !st.empty()) st.pop_back();
//push back the current directory
else if(node != "..") st.push_back(node);
}
for(auto it : st) result += "/" + it;
return result.empty() ? "/" : result;
}
void split(string s, char delim, vector<string>& nodes) {
string temp;
stringstream ss(s);
while(getline(ss, temp, delim)) {
nodes.push_back(temp);
}
}
};
效能:
參考答案(python):
class Solution(object):
def simplifyPath(self, path):
places = [p for p in path.split("/") if p!="." and p!=""]
stack = []
for p in places:
if p == "..":
if len(stack) > 0:
stack.pop()
else:
stack.append(p)
return "/" + "/".join(stack)