当前位置: 首页 > 后端技术 > Java

LeetCode-071-Simplifiedpath

时间:2023-04-01 15:14:07 Java

Simplifiedpath题目描述:给你一个字符串路径,表示一个Unix风格的绝对路径(以'/'开头)指向一个文件或目录,请将其转换成更简洁的Canonical小路。在Unix风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点(..)表示将目录向上一级(指向父目录);两者都可以是复杂的相对路径组件。任意数量的连续斜杠(即“//”)都被视为单个斜杠“/”。对于这个问题,任何其他格式的点(例如,'...')都被视为文件/目录名称。请注意,返回的规范路径必须遵循以下格式:它始终以斜杠“/”开头。两个目录名之间必须恰好有一个斜杠“/”。最后一个目录名称(如果存在)不能以“/”结尾。此外,path仅包括从根目录到目标文件或目录的路径上的目录(即不包含“.”或“..”)。返回简化的规范路径。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:用栈声明一个栈路径,存放出现过的目录,然后遍历路径的字符,得到每个/之间的字符串str。str有几种可能:如果str是.,则不需要处理;如果str为..且paths不为空,则paths丢弃栈顶元素,即最外层目录;如果str不是以上两种情况,说明str是一个目录,被压入栈中。最后将路径倒序排序,以目录格式返回。importjava.util.Stack;publicclassLeetCode_071{publicstaticStringsimplifyPath(Stringpath){Stackpaths=newStack<>();字符串str="";for(charc:path.toCharArray()){if(c=='/'){if(str.length()!=0){if(str.equals(".")){}elseif(str.equals("..")){if(!paths.isEmpty()){paths.pop();}}else{paths.push(str);}海峡=“”;}}else{str+=c;}}if(str.length()!=0){if(str.equals("..")){}elseif(str.equals("..")){if(!paths.isEmpty()){路径.pop();}}else{paths.push(str);}}if(paths.isEmpty()){返回“/”;}StackreversePaths=newStack<>();while(!paths.isEmpty()){reversePaths.push(paths.pop());}字符串结果="";while(!reversePaths.isEmpty()){结果+="/"+reversePaths.pop();}返回结果;}publicstaticvoidmain(String[]args){System.out。println(simplifyPath("/a//b////c/d//././/.."));}}【每日留言】成功之路是用目标铺成的,大目标比大目标更重要没有目标有用,小目标比大目标有用,不要玩现在的生活,玩以后的生活未来