力扣面试150 简化路径 栈 模拟

Problem: 71. 简化路径

思路

👩‍🏫 三叶题解

复杂度

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

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

Code

Java 复制代码
class Solution {
	public String simplifyPath(String path)
	{
		ArrayDeque<String> d = new ArrayDeque<>();
		int n = path.length();
//		从 1 开始 跳过第一个 / 根目录
		for (int i = 1; i < n; i++)// i 表示 / 后面的第一个字母下标
		{
			if (path.charAt(i) == '/')// 重复的 / 直接跳过
				continue;
			int j = i + 1;// j 找到后面的 /
			while (j < n && path.charAt(j) != '/')
				j++;
			String item = path.substring(i, j);// 取出文件名
			if ("..".equals(item))// 回到上一级目录,即把上一个目录去掉
			{
				if (!d.isEmpty())
					d.pollLast();
			} else if (!".".equals(item))// . 则不作处理
			{
				d.addLast(item);// 其他的文件名直接加入栈中
			}
			i = j;
		}
		StringBuilder sb = new StringBuilder();
		while (!d.isEmpty())
		{
			sb.append("/" + d.pollFirst());// 在每个 文件名/目录 前加上 "/"
		}
		return sb.length() == 0 ? "/" : sb.toString();// 特判只有根目录的情况
	}
}
相关推荐
考虑考虑8 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯9 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路13 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
kyriewen13 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
她的男孩15 小时前
后台接口加密别只会 HTTPS,ForgeAdmin 的 RSA + SM4/AES 源码拆解
后端·面试·开源
Randyliu15 小时前
20260508-Agent搭建记录以及对ReAct框架的理解
面试·agent
像我这样帅的人丶你还16 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
ZzT16 小时前
公司用 AI 筛简历,他写了个 AI 帮你挑公司
面试·aigc·ai编程
PBitW17 小时前
GPT训练我的第四天,被打惨了!!!😭😭😭
前端·javascript·面试
plainGeekDev18 小时前
GreenDAO → Room
android·java·kotlin