[leetcode]71. Simplify Path

来源:互联网 发布:轩辕剑神掌进阶数据 编辑:程序博客网 时间:2024/06/06 00:29

题目链接:https://leetcode.com/problems/simplify-path/#/description

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

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


思路:

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

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

  1. 重复连续出现的'/',只按1个处理,即跳过重复连续出现的'/';
  2. 如果路径名是".",则不处理;
  3. 如果路径名是"..",则需要弹栈,如果栈为空,则不做处理;
  4. 如果路径名为其他字符串,入栈。

最后,再逐个取出栈中元素(即已保存的路径名),用'/'分隔并连接起来,不过要注意顺序呦。

时间复杂度:O(n)

空间复杂度:O(n)


class Solution{public:    string simplifyPath(string path)    {        stack<string> sta;        for(int i=0;i<path.length();)        {            while(i<path.length() && path[i]=='/') i++;            string s="";            while(i<path.length() && path[i]!='/')                s+=path[i++];            if(s==".." && !sta.empty())                sta.pop();            else if(s!="" && s!="." && s!="..")                sta.push(s);        }        if(sta.empty())            return "/";        string s="";        while(!sta.empty())        {            s="/"+sta.top()+s;            sta.pop();        }        return s;    }};



0 0
原创粉丝点击