71.Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c"
click to show corner cases.
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".解决这道题的思路主要是将字符串使用java的split("/")函数分开,然后分别对字符串"..",".","/"分别处理就行了代码1:public class Solution { public String simplifyPath(String path) { Stack stack = new Stack(); String[] str = path.split("/"); for(String temp : str){ // if(temp.equals("..") ) // { // if(!stack.isEmpty()) // stack.pop(); // } // else if(!temp.equals(".") && !temp.equals("")) // stack.push(temp); //修改一下用swich看下耗时 switch(temp){ case "": case ".": break; case "..": if(!stack.isEmpty()) { stack.pop(); } break; default : stack.push(temp); } } StringBuilder Str = new StringBuilder(); if(stack.isEmpty()) Str.insert(0, "/"); while(!stack.isEmpty()) { Str.insert(0, "/"+stack.pop()); } return Str.toString(); } }如果换成对字符串操作的话代码2:public class Solution { public String simplifyPath(String path) { Stack stack = new Stack(); String[] str = path.split("/"); for(String temp : str){ if(temp.equals("..") ) { if(!stack.isEmpty()) stack.pop(); } else if(!temp.equals(".") && !temp.equals("")) stack.push(temp); } StringBuilder Str = new StringBuilder(); if(stack.isEmpty()) Str.insert(0, "/"); while(!stack.isEmpty()) { Str.insert(0, "/"+stack.pop()); } return Str.toString(); } } 性能有8%左右的提升!