LeetCode 71. 简化路径题解
题目地址:https://leetcode-cn.com/problems/simplify-path/
我的 LeetCode 题解笔记地址:https://www.yuque.com/gaohanghang/sgrbwh/
0 通过画面
1. 思路
一句话解释: 栈解决,遇到
..
如果栈不为空就弹出栈顶, 不为空串和. 的压入栈中,最后返回栈中元素。
2. 题目描述
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。
示例 1:
输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。
示例 2:
输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
示例 3:
输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
示例 4:
输入:"/a/./b/../../c/"
输出:"/c"
示例 5:
输入:"/a/../../b/../c//.//"
输出:"/c"
示例 6:
输入:"/a//b////c/d//././/.."
输出:"/a/b/c"
3. 题解
class Solution {
public String simplifyPath(String path) {
// 1. 定义一个栈
Stack<String> stack = new Stack<>();
// 2. 将路径按 / 分割为字符串数组
String[] dirs = path.split("/");
// 3. 遍历字符串数组
for (String dir : dirs) {
if (dir.equals("..")) {
// 4. 如果栈不为空遇到 .. 弹出栈顶元素
if (!stack.empty()) {
stack.pop();
}
} else if (dir.length() > 0 && !dir.equals(".")){
// 5. 如果目录长度大于0而且不等于 . 就放入栈中
// 目录长度大于0是为了将多个斜杠变为一个
// 不等于 . 是因为一个点(.)表示当前目录本身,不用放入
stack.push(dir);
}
}
return "/" + String.join("/", stack);
}
}
本文分享自微信公众号 - 骇客与画家(hacker-and-painter)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
零基础开发 nginx 模块
推荐学习资料: nginx 开发指南: http://nginx.org/en/docs/dev/development_guide.html nginx 动态模块编译博客文章: https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/ nginx 源码: https://github.com/nginx/nginx 本文大纲: 简要介绍 Nginx 动态模块 。 快速搭建简单 开发环境 ,拉取源码并编译 nginx 。 简要介绍 nginx 模块 源码配置与目录结构 ,建立工程框架。 简要介绍 nginx HTTP 模块结构,建立 一个 HTTP 空模块 框架代码。 编写一个简单配置文件,支持以普通用户 测试运行 nginx ,方便后续开发测试。 通过一个 hello world 示例简要介绍 Nginx 配置指令 。 简要介绍 Nginx HTTP 请求处理器 。 简要介绍 Nginx 热更新 (reload) 高级功能。 吐槽与闲聊 。 Nginx 动态模块 早期版本的 nginx 如果要扩展功能,新增代码必...
- 下一篇
数据同步一致性保障:OPPO自研JinS数据同步框架实践
本文来自OPPO互联网基础技术团队,转载请注名作者。同时欢迎关注我们的公众号:OPPO_tech,与你分享OPPO前沿互联网技术及活动。 1. 背景 随着业务的快速发展,对于很多公司来说,构建于单地域的技术体系架构,会面临诸如下面的多种问题: 基础设施的有限性限制了业务的可扩展性。业务扩大到单个数据中心撑不住,主要机房已经不能再添加机器,但业务却不断要求扩展 机房、城市级别的故障灾害,影响服务的可持续性。整个机房级别的故障时有发生,每次都引起业务的不可用,对公司的形象与收入都造成严重的影响。如2015年杭州某数据中心光缆被挖断,造成某产品业务几个小时的中断,导致严重的损失 跨地域的访问,影响用户体验等。随着全球化脚步的逼近,试想用户客户端与服务一次交互,一次RTT最少需要10ms,若广州到北京网络延迟一般为40ms,当用户客户端需要与服务器产生多次交互时,对用户体验影响就很大,用户体验非常不友好。 OPPO互联网业务发展快速,已经扩展到全球,随之带来的是技术上的多机房架构,对数据的全球多机房同步在一致性、响应时间、吞吐等方面有更高要求。为了解决以上问题带来的影响,本文将从异地多活底层,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL8.0.19开启GTID主从同步CentOS8