71. Simplify Path

来源:互联网 发布:手机变脸软件 编辑:程序博客网 时间:2024/06/06 05:03

这里写图片描述
开始没有理解题意,后来看别人的理解,这道题要用到栈。

这道题的要求是简化一个Unix风格下的文件的绝对路径。

字符串处理,由于”..”是返回上级目录(如果是根目录则不处理),因此可以考虑用栈记录路径名,以便于处理。需要注意几个细节:

重复连续出现的’/’,只按1个处理,即跳过重复连续出现的’/’;
如果路径名是”.”,则不处理;
如果路径名是”..”,则需要弹栈,如果栈为空,则不做处理;
如果路径名为其他字符串,入栈。
最后,再逐个取出栈中元素(即已保存的路径名),并在前面用’/’分隔并连接起来,不过要注意顺序呦。

#include<iostream>#include<string>#include<stack>using namespace std;class Solution {public:    string simplifyPath(string path)     {        stack<string>temp;        int i=0;        while(i<path.size())        {            while(i<path.size()&&path[i]=='/')                i++;            string s;            while(i<path.size()&&path[i]!='/')                s=s+path[i++];            if(".."==s&&!temp.empty())                temp.pop();            else if(".."!=s&&"."!=s&&s!="")                temp.push(s);        }        if(temp.empty())            return "/";        string ret;        while(!temp.empty())        {            ret='/'+temp.top()+ret;            temp.pop();        }        return ret;    }};int main(){    string path;    cin>>path;    Solution solve;    cout<<solve.simplifyPath(path)<<endl;    return 0;}
0 0
原创粉丝点击