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(); } }
这道题目涉及了知识点:
- 栈的应用
- 循环迭代
- 字符串
代码的解释写在了代码上。
大概就是通过循环遍历路径的每个部分,根据不同的部分内容进行相应的处理:如果是当前目录或空部分,忽略;如果是上级目录,从栈中弹出一个元素表示返回上一级;否则,将当前目录部分入栈。最后,根据栈中的内容构建出简化后的路径,确保路径的开头以斜杠 '/' 开始,同时处理了根目录的情况。