Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example,
path =
"/home/"
, => "/home"
path =
"/a/./b/../../c/"
, => "/c"
Naive Way: 这个看上去好复杂啊,我第一做的时候完全不懂题目是什么意思,因为没有学过cmd语句。现在做就觉得一目了然了。每一个"."表示当前文档位置,就是说停在原地不动的意思,简化的时候需要舍去,因为有没有都一样。每一个".."表示返回上级,就是说前一个有效文件路径可以作废。另外还要处理"//"的情况。
首先因为每一个"/"把每一级文件都分割开了,做好的做法当然是能把被"/"分割的每一个看成一个单位。
这是就想到了String.split()这个函数,这样可以对付"//"的情况。
然后考虑"."和"..",
"."当然是不要了,那么".."就要去掉上一级的文件,如果没有上一级,就要写下来。
这里实际测试的时候发现OJ居然认为"/.."要简化成"/",不管了,就是".."就要去掉上一级,如果没有上一级,也不用写下来。
一开始我用的stack,发现最后输出要再倒转一次,直接用deque(双向队列)就可以了。
public class Solution {
public String simplifyPath(String path) {
String s = "/";
String[] gross = path.split("/");
Deque<Integer> deque = new LinkedList<Integer>();
for(int i = 0;i < gross.length;i++){
if(gross[i].equals(".") || gross[i].equals("")){continue;}
else if(gross[i].equals("..")){
if(!deque.isEmpty())
deque.pollLast();
}else{
deque.offerLast(i);
}
}
while(!deque.isEmpty()){
s += gross[deque.pollFirst()];
if(!deque.isEmpty())
s += "/";
}
return s;
}
}
No comments:
Post a Comment