[LeetCode] Simplify Path(可以不用看)

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".

注意以下几点:input"/.", output"/"

input"/..", output"/"

input"/...", output"/..."即“...”、“....”等是有效的文件名

class Solution {
public:
    string simplifyPath(string path) {
        if(path == "/" || path=="")
            return path;
        string result(1,path[0]);
        int len = path.size();
        if(path[len-1]!=‘/‘){
            path.push_back(‘/‘);
            len++;
        }

        int j=0,start;
        stack<int> sstart;
        for(int i = 1;i<len;){
            if(path[i] != ‘/‘ && path[i] != ‘.‘){//if(1)

                while(i<len && path[i]!=‘/‘){
                    result.push_back(path[i++]);
                    j++;
                }
                int flag = j;
                while(flag>=0 && result[flag]!=‘/‘){
                    flag--;
                }
                sstart.push(flag+1);
                if(i<len-1 && path[i]==‘/‘){
                    result.push_back(path[i++]);
                    j++;
                }else if(i == len-1 && path[i]==‘/‘){
                    return result;
                }
            }else{
                if(path[i]==‘/‘ && result[j]==‘/‘)
                    i++;
                else if(i<len-1 && path[i]==‘.‘ && path[i+1]==‘/‘){
                    i=i+2;
                }else if(i<len-2 && path[i]==‘.‘ && path[i+1]==‘.‘&& path[i+2]==‘/‘){
                    i = i+3;
                    if(result.size() == 1)
                        continue;
                    else{
                        if(result[j]==‘/‘){
                            start = sstart.top();
                            sstart.pop();
                            result.erase(result.begin()+start,result.end());
                            j = start-1;
                        }else{      //  "/.../""output"/.../"
                            int flag = j;
                            while(flag>=0 && result[flag]!=‘/‘){
                                flag--;
                            }
                            sstart.push(flag+1);
                            result.push_back(path[i-3]);
                            result.push_back(path[i-2]);
                            if(i-1<len-1 && path[i-1]==‘/‘){
                                result.push_back(path[i-1]);
                                j+=3;
                            }else if(i-1 == len-1 && path[i-1]==‘/‘){
                                return result;
                            }
                        }
                    }
                }else{
                    result.push_back(path[i++]);
                    j++;
                }
            }//end if(1)
        }//end for
       while(result[j]==‘/‘ && result.size()!=1){
             result = result.substr(0,j);
             j--;
         }
        return result;
    }//end func
};

[LeetCode] Simplify Path(可以不用看)

时间: 2024-10-20 10:17:43

[LeetCode] Simplify Path(可以不用看)的相关文章

[leetcode]Simplify Path @ Python

原题地址:https://oj.leetcode.com/problems/simplify-path/ 题意: Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c" click to show corn

LeetCode——Simplify Path

Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" click to show corner cases. Corner Cases: Did you consider the case where

[Leetcode] Simplify path 简化路径

Given an absolute path for a file (Unix-style), simplify it. For example,path ="/home/", =>"/home"path ="/a/./b/../../c/", =>"/c" click to show corner cases. Corner Cases: Did you consider the case where path 

leetcode Simplify Path

题目的意思是简化一个unix系统的路径.例如: path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c" 我尝试用逐个字符判断的方法,一直提交测试,发现要修改甚多的边界.于是就参考了这位大神 思路其实不会那么复杂,C#里面的话直接可以用split就可以分割string,c++中好像要委婉实现,例如 getline(ss,now,'/') 在c++中ge

leetcode 71 Simplify Path

题目连接 https://leetcode.com/problems/simplify-path/ Simplify Path Description Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"

【LeetCode】Simplify Path

Simplify Path Given an absolute path for a file (Unix-style), simplify it. Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"

Simplify Path leetcode java

题目: 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 = "/../"

[C++]LeetCode: 117 Simplify Path (简化Unix路径 list双向链表)

题目: Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" click to show corner cases. Corner Cases: Did you consider the case w

leetCode 71.Simplify Path(化简路径) 解题思路和方法

Simplify Path Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" click to show corner cases. Corner Cases: Did you consider