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

來源:互聯網
上載者:User

標籤:style   blog   color   io   strong   檔案   for   ar   

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};

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.