[LeetCode]Simplify Path

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

click to show corner cases.

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".
思考:不断提交修改。。
class Solution {
public:
    string simplifyPath(string path) {
        // ..上一级目录
        // .当前目录
        // 根目录下..和.相同
        string ans="";
        vector<string> p; //记录每一级目录
        string temp;
        int len1=path.size();
        int i;
        for(i=0;i<len1;i++)
        {
            if(path[i]=='/')
            {
                if(temp=="") continue; 
                else if(temp=="..") 
                {
                    if(p.empty()) temp=""; //根目录
                    else 
                    {
                        p.pop_back(); //返回上一级目录
                        temp="";
                    }
                }
                else if(temp==".") temp="";
                else 
                {
                    p.push_back(temp);
                    temp="";
                }
            }
            else temp+=path[i];
        }
        if(temp!=""&&temp!=".") 
        {
            if(temp=="..")
            {
                if(!p.empty()) 
                p.pop_back();
            }
            else p.push_back(temp);
        }
        int len2=p.size();
        if(len2==0) return "/";
        for(i=0;i<len2;i++) ans+='/'+p[i];
        return ans;
    }
};

  

原文地址:https://www.cnblogs.com/Rosanna/p/3517522.html