规则1 cd a -> /a
规则2 cd … -> cd …
规则3 pwd -> 打印目录
大致这三个切换问题的实现,和大家分享
使用stack栈实现,
cd x 就入栈,cd … 就出栈,栈为空时就打印 /
注意pwd需要在前面补上 /
package com.nowcoder.seckill.sort; import java.util.*; public class Linux { public static void main(String[] args) { // 使用栈进行 pwd Scanner sc = new Scanner(System.in); int time = 1; int n = sc.nextInt(); Deque<String> stack = new ArrayDeque<>(); //stack.add("/");// 添加根目录 while (n >= time){ String[] order = sc.nextLine().split("\\s+"); if(stack.isEmpty()){ // 如果栈空了 if("cd".equals(order[0])){ if("..".equals(order[1])){ // cd .. 出栈 System.out.println("/"); }else { // cd x 入栈 stack.addFirst("/" + order[1]); System.out.println(stack.peekFirst()); } } }else { // 如果栈不空 if("cd".equals(order[0])){ if("..".equals(order[1])){ // cd .. 出栈 stack.removeFirst(); System.out.println(stack.peekFirst()); // 栈顶元素 }else { // cd x 入栈 stack.addFirst("/" + order[1]); System.out.println(stack.peekFirst()); // 栈顶元素 } } } // 遇到 pwd,遍历 StringBuffer sb = new StringBuffer(); if ("pwd".equals(order[0])){ for (String s : stack){ sb.append(s); } sb.reverse().substring(0, sb.length()); String s = sb.substring(0, sb.length() - 1); System.out.println("/" + s); } time++; } } }