zoukankan      html  css  js  c++  java
  • Leetcode 71 简化路径simplify-path(栈)

    给定一个文档 (Unix-style) 的完全路径,请进行路径简化。

    例如,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => "/c"

    边界情况:

      • 你是否考虑了 路径 = "/../" 的情况?
        在这种情况下,你需返回 "/" 。
      • 此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。
        在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。

    =============================================================

    可得到路径简化规则:

    1. 末尾‘/’删除;
    2. 不重复出现‘/’;
    3. ‘/./’删除;
    4. ‘/../’连并前个路径一起删除;

    思路:可以根据'/'把路径分割成多个元素,根据规则压入栈中,最后用‘/’拼接;

    首先是分割,不像python等的高级语言有split可以直接分割;但是可以用stringstream+getline实现分割功能;

    按规则压入栈中:遇到‘.’不处理,遇到‘..’  pop;其他元素push;

     

    下面是AC代码:

    class Solution {
    public:
        
        string simplifyPath(string path) {
            vector <string> mark;
            string s;
            stringstream ss(path);
            string result;
            while(getline(ss,s,'/')){     //使用stringstream和getline 实现分割功能。
                if(s=="."||s=="")         //如果不加入 ""会出错,存在空字符?! 
                    continue;
                else if(s==".." &&  !mark.empty())     //注意空栈的情况!
                    mark.pop_back();
                else if(s!="..") mark.push_back(s);    
            }
    
            for(string sss:mark){
                result+="/"+sss;
            }
            if(mark.empty())return "/";
            return result;
                
        }
    };
             

  • 相关阅读:
    uitableview 和UISearchBar 下拉提示结合使用
    新浪微博的布局
    ios中键盘处理源码
    JavaScript中十种一步拷贝数组的方法
    小程序图片 mode 设置为 widthFix 图片显示瞬间竖向拉伸变形闪烁
    微信小程序单行和多行省略号
    -webkit-line-clamp 多行文字溢出...
    微信小程序 使用async await
    CSS currentColor 变量的使用
    wn.run万能命令
  • 原文地址:https://www.cnblogs.com/mckc/p/9655812.html
Copyright © 2011-2022 走看看