/* * 71. Simplify Path * 2016-5-10 by Mingyang * 这是一道简化路径的题,路径简化的依据是: * 当遇到“/../"则需要返回上级目录,需检查上级目录是否为空。 * 当遇到"/./"则表示是本级目录,无需做任何特殊操作。 * 当遇到"//"则表示是本级目录,无需做任何操作。 * 当遇到其他字符则表示是文件夹名,无需简化。 * 当字符串是空或者遇到”/../”,则需要返回一个"/"。 * 当遇见"/a//b",则需要简化为"/a/b" * 我的思路是先把所有的按照/分割开来 * 当字符串不为"..",则将字符串入栈。 * 当字符串为"..", 则弹栈(返回上级目录) * 最后使用StringBuilder进行拼接,由于String在每次对字符串修改时候均会生成一个新的String, * 效率较低,一般会采用StringBuilder或者StringBuffer来进行字符串修改的操作, * StringBuilder是StringBuffer的简易替换,是非线程安全的,而StringBuffer是线程安全的。 */ public String simplifyPath(String path) { if(path == null||path.length()==0) return path; Stackstack = new Stack (); String[] list = path.split("/"); for(int i=0; i temp = new Stack (); while(!stack.isEmpty()) temp.push(stack.pop()); while(!temp.isEmpty()) res.append("/"+temp.pop()); if(res.length()==0) res.append("/"); return res.toString(); }