搜索
写经验 领红包
 > 家居

简化路径leetcode(求简单路径)

导语:算法:简化路径

简化路径 leetcode(求简单路径)

题目:

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 &39; 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,&39;)都被视为单个斜杠 &39; 。 对于此问题,任何其他格式的点(例如,&39;)均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

1. 始终以斜杠 &39; 开头。

2. 两个目录名之间必须只有一个斜杠 &39; 。

3. 最后一个目录名(如果存在)不能 以 &39; 结尾。

4. 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 &39; 或 &39;)。

返回简化后得到的 规范路径 。

示例:

输入:path = &34;输出:&34;解释:注意,最后一个目录名后面没有斜杠。 

思路:

获取&34;或者&34;之前的子串,根据子串的值做不同的处理,然后放到数组里,最后遍历数组,输出最终结果。

注意:数组为空时,要返回根目录“/”

代码:

class Solution {public:    string simplifyPath(string path) {        int n=path.size();        vector<string> v;        for(int i=0; i<n;)        {            if(path[i] == &39;)            {                i++;                continue;            }                            int j=i;            while(j<n && path[j] != &39;)                j++;                        string s=path.substr(i, j-i);            if(s==&34;)            {                if(v.size() > 0)                    v.pop_back();            }            else if(s == &34;)            {            }else            {                v.push_back(s);            }                        i=j;        }        if(v.size() == 0)            return &34;;        else{            ostringstream ss;            for(auto& s: v)            {                ss << &34; << s;            }            return ss.str();        }            }};

本文内容由小欣整理编辑!