代码拉取完成,页面将自动刷新
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("/../"));
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。