首页 > 代码库 > 【leetcode】Simplify Path

【leetcode】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 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".
 
用一个堆栈来模拟路径的行为,遇到"."不操作,遇到".."退栈,其他情况都压入堆栈。
程序中先把路径分割出来,然后再处理
 
  1 class Solution {  2   3 public:  5     string simplifyPath(string path) {  9         vector<string> spl; 11         spliceStr(path,spl);    15         vector<string> stk; 17         for(int i=0;i<spl.size();i++) 19         { 21             if(spl[i]=="..") 23             { 25                 if(!stk.empty()) 27                 { 29                   stk.pop_back();   31                 } 33             } 35             else if(spl[i]==".") 37             { 39                 continue; 41             } 43             else 45             { 47                 stk.push_back(spl[i]); 49             } 51         } 55         string result=""; 57         for(int i=0;i<stk.size();i++) 59         { 61             result+="/"+stk[i]; 63         } 67         if(result=="") 69         { 71             result="/"; 73         } 79         return result; 83     } 84  85     86  87     88  89     void spliceStr(string &path,vector<string> &result) 91     { 93         int pre_index=0; 95         string tmp; 97         for(int i=0;i<path.size();i++) 99         {101             if(path[i]==/)103             {105                 tmp=path.substr(pre_index,i-pre_index);107                 if(tmp!="")109                 {111                    result.push_back(tmp);113                 }115                 pre_index=i+1;117             }119         }122 123         if(pre_index<path.size())125         {127             tmp=path.substr(pre_index,path.size()-pre_index);129             if(tmp!="")131             {133                 result.push_back(tmp);135             }137         }139     }141 };

 

【leetcode】Simplify Path