import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param path string字符串
* @return string字符串
*/
public String find_dangerous_cow_path (String path) {
// write code here
// 将路径按照 '/' 进行分割
String[] parts = path.split("/");
Stack<String> stack = new Stack<>();
// 遍历路径的各个部分
for (String part : parts) {
if (part.equals(".") || part.isEmpty()) {
// 忽略当前目录 "." 和空部分
continue;
} else if (part.equals("..")) {
// 如果是上级目录,从栈中弹出一个元素表示返回上一级
if (!stack.isEmpty()) {
stack.pop();
}
} else {
// 否则,将部分入栈表示当前目录
stack.push(part);
}
}
// 构建简化后的路径
StringBuilder simplifiedPath = new StringBuilder();
for (String dir : stack) {
simplifiedPath.append("/").append(dir);
}
// 处理根目录的情况
if (simplifiedPath.length() == 0) {
simplifiedPath.append("/");
}
return simplifiedPath.toString();
}
}
这道题目涉及了知识点:
- 栈的应用
- 循环迭代
- 字符串
代码的解释写在了代码上。
大概就是通过循环遍历路径的每个部分,根据不同的部分内容进行相应的处理:如果是当前目录或空部分,忽略;如果是上级目录,从栈中弹出一个元素表示返回上一级;否则,将当前目录部分入栈。最后,根据栈中的内容构建出简化后的路径,确保路径的开头以斜杠 '/' 开始,同时处理了根目录的情况。

京公网安备 11010502036488号