当前位置: 首页 > news >正文

71. Simplify Path

71. 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".

解析

这道题的要求是简化一个Unix风格下的文件的绝对路径。

字符串处理,由于".."是返回上级目录(如果是根目录则不处理),因此可以考虑用栈记录路径名,以便于处理。需要注意几个细节:

重复连续出现的'/',只按1个处理,即跳过重复连续出现的'/';
如果路径名是".",则不处理;
如果路径名是"..",则需要弹栈,如果栈为空,则不做处理;
如果路径名为其他字符串,入栈。

最后,再逐个取出栈中元素(即已保存的路径名),用'/'分隔并连接起来,不过要注意顺序呦。

时间复杂度:O(n); 空间复杂度:O(n)

  • 或者在if(s[i]!='/')下面考虑问题,就不存在末尾为空字符串的情况
class Solution_71 {
public:

    // test:"/a/./b///../c/../././../d/..//../e/./f/./g/././//.//h///././/..///" output:"/e/f/g"
    string simplifyPath(string path) {

        stack<string> st;
        for (int i = 0; i < path.size();i++)
        {
            while (i < path.size() && path[i] == '/') i++;  //可能多个

            string str = "";
            while (i<path.size()&&path[i]!='/')  //记录'/'之间的字符串
            {
                str += path[i];
                i++;
            }
            if (str == ".")
            {
                continue;
            }
            if (str==".."&&!st.empty())
            {
                st.pop();
            }
            else if (str!=".."&&str!="") //必须有啊   /.. ; ///斜杆在末尾的时候str=""
            {
                st.push(str);
            }
        }
        string ret = "";
        if (st.empty())
        {
            return "/";
        }
        while (!st.empty())
        {
            ret = "/" + st.top()+ret; //加在后面,否则逆序
            st.pop();
        }

        return ret;
    }

};

题目来源

  • 71. Simplify Path

相关文章:

  • numpy 数组运算
  • Java 选择排序selection sort
  • 磁盘管理
  • 利用SCVMM 2012 R2来管理Azure虚拟机
  • AlphaGo告诉我们人工智能成功的五大秘诀,AI下一个风口在哪里?
  • 互联网面临新挑战,区块链经济将兴起
  • 2016年全球IDC市场规模达到451.9亿美元,增速达17.5%
  • YII2中查询生成器Query()的使用
  • notepad++(NPP) 任意多光标编辑,超越列块模式
  • JAVA jdk安装教程及环境变量配置
  • 第一阶段:前端开发_HTMLCSS
  • JavaScript正则表达式学习笔记(一)
  • 转载:ORA-12516 “TNS监听程序找不到符合协议堆栈要求的可用处理程序” 解决方案...
  • 深入浅出MyBatis:反射和动态代理
  • 阿里云服务器 从0 配置Node Nginx 免密ssh 等 环境实现 pm2一键线上部署
  • @angular/forms 源码解析之双向绑定
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Docker: 容器互访的三种方式
  • eclipse(luna)创建web工程
  • JavaScript异步流程控制的前世今生
  • php的插入排序,通过双层for循环
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue学习系列(二)vue-cli
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对JS继承的一点思考
  • 技术发展面试
  • 批量截取pdf文件
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用putty远程连接linux
  • 算法-图和图算法
  • ​Java并发新构件之Exchanger
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (floyd+补集) poj 3275
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二)正点原子I.MX6ULL u-boot移植
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (三)elasticsearch 源码之启动流程分析
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET Micro Framework初体验(二)
  • .NET 设计一套高性能的弱事件机制
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • @GetMapping和@RequestMapping的区别
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [dfs] 图案计数
  • [docker] Docker容器服务更新与发现之consul
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [Flex][问题笔记]TextArea滚动条问题
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [Godot] 3D拾取