1 Star 0 Fork 0

孤寂灬无痕/algorithm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
SimplifyPath.java 2.49 KB
一键复制 编辑 原始数据 按行查看 历史
孤寂灬无痕 提交于 5年前 . No Message
package com.youngdream.algorithm.medium.string;
/**
* @author YoungDream
* @email 994300880@qq.com
* @date 2020/9/9 0:00
**/
public class SimplifyPath {
/**
* 以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
* 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
* 请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。
* <p>
* 示例 1:
* 输入:"/home/"
* 输出:"/home"
* 解释:注意,最后一个目录名后面没有斜杠。
* <p>
* 示例 2:
* 输入:"/../"
* 输出:"/"
* 解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
* <p>
* 示例 3:
* 输入:"/home//foo/"
* 输出:"/home/foo"
* 解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
* <p>
* 示例 4:
* 输入:"/a/./b/../../c/"
* 输出:"/c"
* <p>
* 示例 5:
* 输入:"/a/../../b/../c//.//"
* 输出:"/c"
* <p>
* 示例 6:
* 输入:"/a//b////c/d//././/.."
* 输出:"/a/b/c"
*
* @param path 给定路径
* @return 简化后的路径
*/
public String simplifyPath(String path) {
String[] split = path.split("/");
String[] conputs = new String[split.length];
int index = 0;
for (String s : split) {
if ("".equals(s) || ".".equals(s)) {
continue;
}
if ("..".equals(s)) {
if (index > 0) {
index--;
}
} else {
conputs[index++] = s;
}
}
if (index == 0) {
return "/";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < index; i++) {
sb.append("/").append(conputs[i]);
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(new SimplifyPath().simplifyPath("/../"));
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/qq994300880/algorithm.git
git@gitee.com:qq994300880/algorithm.git
qq994300880
algorithm
algorithm
master

搜索帮助