Simplify Path

来源:互联网 发布:mac自带软件哪些可以删 编辑:程序博客网 时间:2024/05/17 08:50
-----QUESTION-----

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".

-----SOLUTION-----

class Solution {public:    string simplifyPath(string path) {        stack<char> pathStack;        pathStack.push(path[0]);        for(int i =1; i<path.length(); i++)        {            if(path[i]=='/')            {                if(pathStack.top() == '/') continue;                else if(pathStack.top()=='.')                {                    pathStack.pop();                }                else                {                    pathStack.push(path[i]);                }            }            else if(path[i]=='.')            {                if(pathStack.top() != '.') {                    pathStack.push(path[i]);                    continue;                }                pathStack.pop();                if(pathStack.size()==1) continue;                                pathStack.pop();                while(pathStack.top() != '/') pathStack.pop();                if(pathStack.size()>1){                    pathStack.pop();                }             }            else            {                pathStack.push(path[i]);            }               }        while(pathStack.size()>1 && (pathStack.top()=='/' || pathStack.top()=='.')) pathStack.pop();        if(pathStack.empty()) return "/";        int len = pathStack.size();        path = path.substr(0,len);        while(!pathStack.empty())        {            path[--len]=pathStack.top();            pathStack.pop();        }        return path;    }};


0 0
原创粉丝点击