LeetCode:简化路径【71】
LeetCode:简化路径【71】
题解参考天码营:https://www.tianmaying.com/tutorial/LC71
题目描述
给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
边界情况:
- 你是否考虑了 路径 =
"/../"的情况?
在这种情况下,你需返回"/"。 - 此外,路径中也可能包含多个斜杠
'/',如"/home//foo/"。
在这种情况下,你可忽略多余的斜杠,返回"/home/foo"。
题目分析
对于这道题目来说,最为关键的算法就是如何处理".."对于之前路径的“退回”操作。不难发现,每次“退回”的都是当前路径中的最后一个“文件夹”,每次进入的文件夹也都会出现在路径的最后。这样的一个“从一段添加或者删除”的模式恰恰就是栈的定义。
当我们知道要使用栈结构以后,还有几个坑需要注意:
- ""和"."都是不需要处理的
- /,//,///,只要是连续的斜线都是/
- 在根目录是使用".."是无法退后的,这TMD巨坑,结合实际了!
我们处理的步骤是如下:
- 如果当前段是
..,则看stack中是否有元素,如果有,删除最后一个 - 如果当前段是
.或者,则不做任何处理 - 否则将当前段加入到stack的末尾
这样,在处理完所有段之后,我们就可以确保仍然在stack中的就是最简单的路径字符串了,这个时候,我们只需要使用/将他们拼接成答案即可。
Java题解
class Solution {
public String simplifyPath(String path) {
Stack<String> stringStack = new Stack<>();
String[] arr = path.split("/");
for(String str:arr)
{
if(str.equals("")||str.equals("."))
continue;
if(str.equals("..")) {
if(!stringStack.empty())
stringStack.pop();
}
else
stringStack.push(str);
}
String ans = "";
while (!stringStack.empty())
{
ans="/"+stringStack.pop()+ans;
}
if(ans.equals(""))
return "/";
return ans;
}
}
LeetCode:简化路径【71】的更多相关文章
- LeetCode 简化路径(探索字节跳动)
题目描述 给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如, path = "/home/", => "/home" path ...
- LeetCode 71.简化路径
LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ...
- Java实现 LeetCode 71 简化路径
71. 简化路径 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (-) 表示将 ...
- LeetCode OJ:Simplify Path(简化路径)
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...
- LeetCode No.70,71,72
No.70 ClimbStairs 爬楼梯 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. ...
- lintcode 中等题:Simplify Path 简化路径
题目 简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./b ...
- LeetCode:路径总和II【113】
LeetCode:路径总和II[113] 题目描述 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例:给定如下二叉树, ...
- LeetCode:路径总和【112】
LeetCode:路径总和[112] 题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例 ...
- Leetcode 不同路径系列
Leetcode不同路径系列题解笔记 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移动一 ...
随机推荐
- nodejs操作图片方法
最近项目中用到nodejs做图片服务器,用户上传图片生成缩略图返回地址一系列操作. 原来一直用.net平台,所有都封装好了生成缩略图这种分分钟就解决了,遂度娘一番全是调用imagemagick和gra ...
- 深入了解Go Playground
简介 2010年9月,我们介绍了Go Playground,这是一个完全由Go代码组成和返回程序运行结果的web服务器. 如果你是一位Go程序员,那你很可能已经通过阅读Go教程或执行Go文档中的示例程 ...
- EJB包含哪3种bean
EJB包含哪3种bean 解答:session bean(会话bean), entity bean(实体bean), message bean(消息bean)
- 类加载器(ClassLoader)
静态库.动态连接库 程序编制一般需经编辑.编译.连接.加载和运行几个步骤.在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件:在连接步骤中,连接器将从库文件取得所需的代码,复制 ...
- CodeSmith自动生成代码使用
官网地址:http://www.codesmithtools.com/ CodeSmith开发系列资料总结 http://terrylee.cnblogs.com/archive/2005/12/28 ...
- SurvivalShooter学习笔记(六.玩家生命)
需求: 玩家有初始生命: 被敌人攻击后:掉血,播放受击音效,红屏(用UI图片做)闪烁提示,UI面板刷新生命 直至死亡:死亡播放死亡音效,游戏结束: 1.变量: 玩家生命 public int star ...
- Lingo (Spring Remoting) : Passing client credentials to the server
http://www.jroller.com/sjivan/entry/lingo_spring_remoting_passing_client Lingo (Spring Remoting) : P ...
- thinkphp 模板里嵌入 php代码
<php> echo 'nihao';</php><?phpecho 'gge';?> Php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP ...
- poj3243 Clever Y[扩展BSGS]
Clever Y Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8666 Accepted: 2155 Descript ...
- Visual Studio 2010 如何改用 Beyond Compare 作为 TFS 的比较工具
Beyond Compare 是一套非常实用的文件及文件夹比较软件,不仅可以快速比较出两个文件夹的不同之处,还可以详细的比较文件之间的内容差异.最近改用 TFS 进行版本控管之后,说实在的还是习惯使用 ...