力扣 71 简化路径

力扣 71 简化路径_第1张图片
力扣 71 简化路径_第2张图片
一开始没看懂题目,所以一些典型的测试用例靠提交来获取(不断试错)/(ㄒoㄒ)/~~力扣 71 简化路径_第3张图片
弄清楚几种情况就行了

返回上一级 /a/。。/c /c
当前目录 /a/。/c/ /a/c
重复 /a//c/ /a/c
含点的文件名 /a/。ccc。/ /a/。ccc。
含点的文件名 /a/。.。cc。。/ /a/。。ccc。。
含点的文件名 /a/。。。/ /a/。。。
含点的文件名 /a/。.。。cc。。。/ /a/。。。ccc。。。
普通文件名 /a/c/ /a/c

代码:

class Solution {
public:
    string simplifyPath(string path) {
        string res="";
        int i=1;
        while(i<path.size()){
            if(path[i]=='/') i++;
            else if(path[i]=='.'){// .开头
                i++;   
                if(i<path.size() && path[i]=='.'){//  ..开头
                    i++;
                    if(i<path.size()&&path[i]!='/'){//... 或者..其他  格式
                        string temp="..";
                        while(i<path.size()&&path[i]!='/'){
                            temp+=path[i];
                            i++;
                        }
                        res=res+"/"+temp;
                    }
                    else{//..切换到上一级
                        int j=0;
                        for(j;j<res.size();j++)
                            if(res[res.size()-1-j]=='/') break;
                        res=res.substr(0,res.size()-j-1);
                    }
                }
                else{//  测试点 "/.hidden"
                    if(i<path.size() && path[i]!='.' && path[i]!='/'){ //.其他 开头
                        string temp=".";
                        while(i<path.size()  && path[i]!='/'){
                            temp+=path[i];
                            i++;
                        }
                        res=res+"/"+temp;
                    }
                }
            }
            else{//目录  "/hello../world"
                string temp="";  
                while(i<path.size()&&path[i]!='/'){
                    temp+=path[i];
                    i++;
                }
                res=res+"/"+temp;
            }
        }
        if(res.size()==0) return "/";//  测试点"/../"
        return res;
    }
};

力扣 71 简化路径_第4张图片

你可能感兴趣的:(力扣,leetcode,算法,职场和发展)