【leetcode刷题笔记】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. 用split函数将path按照一个或者多个(正则表达式实现)'/'分成不同的字符串存放在数组positions中。
  2. 遍历positions,如果遇到非"..",".",""的字符串,就放入answers列表中;如果遇到".."且answers不为空,就把answers尾部的字符串扔掉。
  3. 最后把answers中的字符串用"/"连接起来,注意在连接后的字符串结尾会多一个"/',可以substring一下result去掉。

代码如下:

 1 public class Solution {

 2     public String simplifyPath(String path) {

 3         ArrayList<String> answers = new ArrayList<String>();

 4         String[] positions = path.split("/+");

 5         for(int i = 0;i < positions.length;i++){

 6             if(positions[i].equals("..")){

 7                 if(answers.size() > 0)

 8                     answers.remove(answers.size()-1);

 9             }

10             else if(!positions[i].equals(".") && !positions[i].equals(""))

11             {

12                 answers.add(positions[i]);

13             }

14         }

15         

16         String result = new String("/");

17         for(String s:answers)

18             result += s + "/";

19         

20         if(result.length() > 1)

21             result = result.substring(0,result.length()-1);

22         

23         return result;

24     }

25 }

 

你可能感兴趣的:(LeetCode)