3.14 Simplify Path

来源:互联网 发布:软件开发业务介绍 编辑:程序博客网 时间:2024/05/01 21:58

http://www.cnblogs.com/TenosDoIt/p/3465328.html


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

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

 

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) {        int len = path.size();        vector<string> vec;        int i = 0, index = 0;        while(i < len)        {            int j = path.find('//', i + 1);            string tmp;            if(j != string::npos)                tmp = path.substr(i, j - i);            else {tmp = path.substr(i, len); j = len;}                     if(tmp == "/");            else if(tmp == "/.");            else if(tmp == "/..")                {if(!vec.empty())vec.pop_back();}            else                vec.push_back(tmp);            i = j;        }        if(vec.empty())return "/";        else        {            string res;            for(int i = 0; i < vec.size(); i++)                res += vec[i];            return res;        }    }};


0 0
原创粉丝点击