Simplify Path [LeetCode]

7022 단어 LeetCode
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" .

  • Summary: Very careful about corner cases, like "/", "/.", "..". 
     1 class Solution {
    
     2 public:
    
     3     void handleEntry(vector<string> &path_stack, string path_entry) {
    
     4         if(path_entry == "..") {
    
     5             if(path_stack.size() > 0)
    
     6                 path_stack.pop_back();
    
     7         }else if (path_entry != ".") 
    
     8                 path_stack.push_back(path_entry);
    
     9     }
    
    10     
    
    11     string simplifyPath(string path) {
    
    12         string simple_path;
    
    13         if(path.size() == 0)
    
    14             return simple_path;
    
    15         vector<string> path_stack;
    
    16         string path_entry;
    
    17         for(int i = 0; i < path.size(); i ++) {
    
    18             if(path_entry.size() == 0 && path[i] == '/'){
    
    19                 continue;
    
    20             }else if (path_entry.size() != 0 && path[i] == '/') {
    
    21                 handleEntry(path_stack, path_entry);
    
    22                 path_entry.clear();
    
    23             }else {
    
    24                 path_entry.push_back(path[i]);
    
    25             }
    
    26         }
    
    27         if(path_entry.size() > 0)
    
    28             handleEntry(path_stack, path_entry);
    
    29     
    
    30         for(string item: path_stack) {
    
    31             simple_path += "/";
    
    32             simple_path += item;
    
    33         }
    
    34         if(simple_path.size() == 0)
    
    35             return "/";
    
    36         return simple_path;
    
    37     }
    
    38 };

    좋은 웹페이지 즐겨찾기