zoukankan      html  css  js  c++  java
  • [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
    };
  • 相关阅读:
    学习Python第三天
    学习Python第二天
    学习Python第一天
    centos7 系统优化
    crond计划任务
    day2
    day1
    A.浏览器访问 kube-apiserver 安全端口
    12.清理集群
    11.部署 harbor 私有仓库
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3919930.html
Copyright © 2011-2022 走看看