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
    };
  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3919930.html
Copyright © 2011-2022 走看看