力扣面试经典150题——Unix简化路径
https://leetcode.cn/problems/simplify-path/description/?envType=study-plan-v2&envId=top-interview-150
思路:将串以/分割,判断字符串是…/./其他,进行入栈和出栈,最后留下的就是结果,拼装一下就好了。
三个要点:
第一:字符串的比较统一拿equals来比
第二:队列的遍历一定要拿while,不要用for,除非一开始就拿个变量存下来长度,不然遍历时候长度在变化
第三:split()函数会让空开的地方分割出来空字符串“”
举个栗子:
String s = " a b c";
String[] x = s.split(" ");
for(String unit:x)
System.out.println(unit);
结果是
a
b
c
代码:
class Solution {
public String simplifyPath(String path) {
String[] units = path.split("/");
String ans="";
Deque<String> queue = new LinkedList<>();
for(int i=0;i<units.length;i++){
//System.out.println(units[i]);
if(units[i].equals("")||units[i].equals("."))
continue;
else if(units[i].equals("..")&&queue.size()>0)
queue.removeFirst();
else if(units[i].equals("..")&&queue.size()==0)
continue;
else
queue.addFirst(units[i]);
}
//千万别这么写
// for(int i=0;i<queue.size();i++){
// if(i>=1)ans+="/";
// ans+=queue.peekFirst();
// queue.removeFirst();
// }
List<String> list = new ArrayList<>();
while(queue.size()!=0){
list.add(queue.peekFirst());
queue.removeFirst();
}
for(int i=list.size()-1;i>=0;i--){
ans=ans+"/"+list.get(i);
}
if(ans.equals(""))
ans = "/";
return ans;
}
}
PS:LinkedList的API