zoukankan      html  css  js  c++  java
  • 【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 };
  • 相关阅读:
    Redis 优缺点
    如何保证接口的幂等性。。。。。
    自动化部署 jenkins 插件简介
    JWT与Session比较和作用
    代码注释鉴赏,喜欢就拿去用!
    python中计时模块timeit的使用方法
    【Java】JavaIO(二)、节点流
    【Java】JavaIO(一)、基础知识
    【Git】四、Git工作
    【Git】三、工作区、暂存区、版本库
  • 原文地址:https://www.cnblogs.com/reachteam/p/4192434.html
Copyright © 2011-2022 走看看