package com.interview.stackqueue;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;
/**
* Date 04/18/2016
* @author Tushar Roy
*
* Given an absolute path for a file (Unix-style), simplify it.
* For example,
* path = "/home/", => "/home"
* path = "/a/./b/../../c/", => "/c"
*
* Space complexity O(n)
* Time complexity O(n)
*
* https://leetcode.com/problems/simplify-path/
*/
public class SimplyPath {
public String simplifyPath(String path) {
Deque<String> stack = new LinkedList<>();
StringTokenizer token = new StringTokenizer(path, "/");
while (token.hasMoreTokens()) {
String tok = token.nextToken();
if (tok.equals(".")) {
continue;
} else if (tok.equals("..")) {
stack.pollFirst();
} else {
stack.offerFirst(tok);
}
}
StringBuffer buff = new StringBuffer();
if (stack.isEmpty()) {
buff.append("/");
}
while(!stack.isEmpty()) {
buff.append("/").append(stack.pollLast());
}
return buff.toString();
}
public static void main(String args[]){
String absCurrentFolder = "/home/tusroy";
SimplyPath mfc = new SimplyPath();
System.out.println(mfc.simplifyPath(absCurrentFolder));
}
}