1. 程式人生 > >71.簡化路徑

71.簡化路徑

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)

效能:

這裡寫圖片描述