Simplify Path(路径简化)

问题:

来源:https://leetcode.com/problems/simplify-path

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

Corner Cases:
Did you consider the case where path = "/../"?
In this case, you should return "/".
Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
In this case, you should ignore redundant slashes and return "/home/foo".

思路:

先将路径按照“/”切分,然后遍历切分后的路径,利用栈的思想,遇到“”或者“.”就忽略,遇到“..”就出栈(除非栈中没有元素),遇到其他字符串就入栈,最后将栈中的字符串用“/”拼接起来

 1 import java.util.Stack;
 2 class Solution {
 3     public String simplifyPath(String path) {
 4         String[] subpaths = path.split("/");
 5         Stack<String> stack = new Stack<String>();
 6         for(String subpath: subpaths) {
 7             if(subpath.equals(".") || subpath.equals("")) {
 8                 continue;
 9             } else if(subpath.equals("..")) {
10                 if(!stack.isEmpty()) {
11                     stack.pop();
12                 }
13             } else {
14                 stack.push(subpath);
15             }
16         }
17         StringBuilder stringBuilder = new StringBuilder();
18         for(String subpath: stack) {
19             stringBuilder.append("/" + subpath);
20         }
21         if(stringBuilder.length() == 0) {
22             stringBuilder.append("/");
23         }
24         return stringBuilder.toString();
25     }
26 }

 

转载于:https://www.cnblogs.com/renzongxian/p/7824838.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值