欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

71. Simplify Path

程序员文章站 2022-03-05 11:38:05
...

71. Simplify Path

这道题要求简化给定的路径。

我用了栈,用vector也可以,要注意有多个/连续出现的情况,所以要跳过多余的/,然后把/之间的路径名称提出来,如果是.,不做处理,如果是..,把栈最上面的弹出来。否则就入栈。遍历完了之后,如果栈为空,返回/即可,如果栈不为空,把路径输出来。注意有一个用例是/../,这个应该返回/

class Solution {
public:
    string simplifyPath(string path) {
        stack<string> s;
        int start = 0;
        while(start < path.size()){
            string part;
            while(start < path.size() && path[start] == '/')   start++;
            if(start == path.size())    break;
            int end = start;
            while(end < path.size() && path[end] != '/')   end++;
            end = end-1;
            part = path.substr(start, end - start + 1);
            if(part == ".."){
                if(!s.empty())  s.pop();
            }else if(part != "."){
                s.push(part);
            }
            cout << part << endl;
            start = end + 1;
        }
        string res;
        if(s.empty())   
            res = "/";
        while(!s.empty()){
            res = "/" + s.top() + res;
            s.pop();
        }
        return res;
    }
};
//测试用例/../
//测试用例"/JD/nA/./tXa/./././DFaiU/l/..///../nPwm"