Monday, November 25, 2013

LeetCode Problem : Simplify Path

Problem


Given an absolute path for a file (Unix-style), simplify it.
For example,
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