/**71. Simplify Path
* @param path
* @returnString
*/
public String simplifyPath(String path) {
Stack<String> s = new Stack<String>();
String[] strs = splitString (path);
for (int i = 0; i < strs.length; i++) {
if (strs[i].equals(".")) {
continue;
} else if (strs[i].equals("..")) {
if (!s.empty()) {
s.pop();
}
} else {
s.push(strs[i]);
}
}
String ret = "";
while (!s.empty()) {
ret = "/" + s.pop() + ret;
}
if (ret.isEmpty()) {
ret = "/";
}
return ret;
}
public String[] splitString(String s) {
String temp = "";
Queue<String> arr = new LinkedList<String>();
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '/') {
if (temp != "") {
arr.offer(temp);
count++;
}
temp = "";
} else {
temp += s.charAt(i);
}
}
if (temp != "") {
arr.offer(temp);
count++;
}
String[] ret = new String[count];
int i = 0;
while (!arr.isEmpty()) {
ret[i++] = arr.poll();
}
return ret;
}
//Unix-style的path中: “.”表示当前目录下的子目录,”..”表示返回上一级目录,”…”保留
//首先以’/’拆分字符串,之后用栈来操作,如果..则出栈,最后拼接的时候加上’/’
//Queue: offer(), pop(), isEmpty()
//String比较相等: equals()