LeetCode 71. 简化路径

第一个leetcode题解,太久没做题上来就脑淤血。。。

解题流程

  • 解题思路:
  • 代码实现:

解题思路:

这道题要求我们简化路径,只是一道模拟题,注意以下细节即可:

  1. 首先格式不统一,我们需要在路径结尾加一个"/",比如"/hello"我们改成"/hello",这样可以让我们最后一个字符串能够读完(读取一个单词是要判断是否到了"/")
  2. 每读完一个字符串,分为4种情况:
    • 字符串为".",代表当前路径
    • 字符串为"", 代表斜杠连起来了,还是当前路径(只有"/hello//jerry/"这种斜杠连读才会产生空字符串)
    • 字符串为"…", 返回上一级目录
    • 字符串不是以上三种,进入下一级目录,当前目录 + “/” + 新字符串
  3. 上面4中情况最复杂的是回退,回退要注意的事情是注意别越界(越界的情况是当前的答案本事是空的,如果回退找最后一个"/??"就会下标为-1)
  4. 每次处理完要把新字符串置空
  5. 如果输入的字符串本身是空串或者"/",那答案会为"", 我们应该改成"/"

注意以上的几点直接模拟即可

代码实现:

class Solution {
    public String simplifyPath(String path) {
        // 将所有的字符串统一格式为 /??/???/ 在末尾加个/保证字后一个路径名可以读出来
        if(path.charAt(path.length() - 1) != '/') path += "/";
        String res = "", name = "";

        for (int i = 0; i < path.length(); i ++ ) {
            if(path.charAt(i) != '/') name += path.charAt(i); // 一直读完一个单词
            else if(name.equals(".") || name.equals("")) { // .代表当前目录,空代表/连起来了
                name = ""; // 这里也要置空,应为有"."的存在
            } else {
                if(name.equals("..")) {
                    // 回退一步
                    int to = res.length() - 1;
                    // 最终to之后的字符全删掉(包括to)
                    while(to >= 0 && res.charAt(to) != '/') to -- ;
                    if(to > -1) res = res.substring(0, to);
                    else res = "";
                    
                } else {
                    // 加上这个路径
                    res += "/" + name;
                }
                name = "";
            }
            
        
        }
        if(res.equals("")) res = "/"; // 这里要转换
        return res;
    }
}

代码很丑,裂开

你可能感兴趣的:(leetcode题解,leetcode)