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 };
  • 相关阅读:
    第七章-方法区
    wchar_t 字符拼接
    C++获取appdata路径
    char * 、BSTR、long、wchar_t *、LPCWSTR、string、QString类型转换
    climits 与 符号常量
    Qt数据结构-QString二:QString的arg能不能像Python的format一样使用
    Qt数据结构-QString一:常用方法
    怎么查看摄像头的硬件ID
    jenkins提示使用java11版本
    Jenkins:the input device is not a TTY
  • 原文地址:https://www.cnblogs.com/reachteam/p/4192434.html
Copyright © 2011-2022 走看看