题目:
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"
.
思路:
线分割,然后在stack里进行操作
package ds; import java.util.Stack; public class SimplifyPath { public String simplifyPath(String path) { String[] names = path.split("/"); Stack<String> s = new Stack<String>(); for (int i = 0; i < names.length; ++i) { String name = names[i]; switch (name) { case "": case ".": break; case "..": if (!s.isEmpty()) s.pop(); break; default: s.push(name); break; } } if (s.isEmpty()) return "/"; StringBuilder res = new StringBuilder(); while (!s.isEmpty()) { res.insert(0, "/" + s.pop()); } return res.toString(); } public static void main(String[] args) { // TODO Auto-generated method stub String path = "/a/b/c////d/e/"; SimplifyPath s = new SimplifyPath(); System.out.println(s.simplifyPath(path)); } }