【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)