力扣面试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();// 特判只有根目录的情况
	}
}
相关推荐
中新传媒2 分钟前
德宸堂心理双师同诊
java·前端·数据库
_深海凉_3 分钟前
LeetCode热题100-二叉树的直径
算法·leetcode·职场和发展
水蓝烟雨8 分钟前
3373. 连接两棵树后最大目标节点数目 II
算法·leetcode
想唱rap9 分钟前
NAT、内网穿透、代理服务
java·linux·网络·网络协议·udp·智能路由器
环流_16 分钟前
nacos环境隔离
java·服务器·前端
取谖慕12.17 分钟前
面试运维岗位所遇到的问题
运维·面试·职场和发展
芋只因17 分钟前
天机学堂学习笔记
java·笔记·学习
摇滚侠22 分钟前
Spring 面试题 真正的 offer 偏方 Java 基础 Java 高级
java·后端·spring
YL2004042623 分钟前
044二叉搜索树中第K小的元素
数据结构·leetcode
暗不需求30 分钟前
深入理解 React 受控组件与非受控组件:从源码到面试
前端·react.js·面试