4/09/2014

Leetcode -- Simplify Path

class Solution {  
 public:  
   string simplifyPath(string path) {  
     vector<string> stack;  
     size_t loc = path.find_first_of('/');  
     path = path.substr(loc);  
     while(!path.empty()) {  
       loc = path.find_first_not_of('/');  
       if(loc == string::npos) {  
         break;  
       }  
       path = path.substr(loc);  
       size_t end = path.find_first_of('/');  
       string token;  
       if(end == string::npos) {  
        token = path;  
       } else {  
        token = path.substr(0, end);  
       }  
       if(token == ".") {  
       } else if(token == "..") {  
         if(!stack.empty()) {  
           stack.pop_back();  
         }  
       } else {  
         stack.emplace_back(token);  
       }  
       if(end == string::npos) {  
        break;  
       } else {  
       path = path.substr(end);  
       }  
     }  
     string result("/");  
     for(string& str : stack) {  
       result += str + "/";  
     }  
     if(result != "/") {  
       result = result.substr(0, result.length() - 1);  
     }  
     return result;  
   }  
 };  

No comments: