LeetCode - Simplify Path | Darren's Blog



Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
The simplification of an absolute path can be done by first separating the path by "/" and interpreting each segment as subdirectory, current directory, or its parent directory. For ease of going back to the parent directory, we can use a stack to which a segment is pushed as long as it represents a subdirectory. Finally, the stack is converted into an array, and the simplified path is the concatenation of the segments in the stack preceded by a "/".
public String simplifyPath(String path) {
        if (path == null)
            return null;
        if (path.length() == 0)
            return "/";
        int n = path.length();
        Stack<String> stack = new Stack<String>();
        String[] directories = path.split("/");     // Separate path by "/"
        for (String dir : directories) {
            if (dir.length() != 0) {
                if (dir.equals("..")) {     // Go up to its parent
                    if (!stack.empty())
                        stack.pop();
                } else if (!dir.equals(".")) {  // Enter its subdirectory
                    stack.push(dir);
                }
            }
            // No redundant "/"
        }
        // Construct simplified path
        if (stack.empty())  // No subdirectory
            return "/";
        StringBuilder result = new StringBuilder();
        for (String s : stack.toArray(new String[stack.size()]))
            result.append("/"+s);
        return result.toString();
    }
}
Also refer to http://mounttop.blogspot.com/2014/03/leetcode-simplify-path.html
http://stupidcodergoodluck.wordpress.com/2013/11/16/leetcode-simplify-path/
Read full article from LeetCode - Simplify Path | Darren's Blog

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts