71. Simplify Path做题报告

题目链接:

71. Simplify Path

题目大意:

简化路径,如果对于‘.‘字符,表明为此目录,对于‘..‘字符,表明为回到此目录上一节点(即:删除上一节点),我们现在需要删除多余的‘/‘字符和‘.‘字符

做题报告:

(1)该题涉及的算法与数据结构与知识点

Java NIO中的Files类,正则表达式,栈

(2)自己的解答思路+代码+分析时间和空间复杂度

class Solution {
    public String simplifyPath(String path) {
     String[] strs = path.split("/+");
     Stack<String> stack = new Stack<String>();
     for(int i = 1;i < strs.length ;i++){
         if(strs[i].equals(".")) continue;
         else if(strs[i].equals("..")){
             if(stack.empty() == false) stack.pop();
         }
         else stack.push("/"+strs[i]);
     }
     if(stack.empty() == true) return "/";
     StringBuilder ans = new StringBuilder();
     while(stack.empty() == false){
         String e = stack.pop();
         ans.insert(0,e);
     }
     return ans.toString();
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

(3)大神们的解答思路+代码+分析时间和空间复杂度

第一种:IO流

import java.nio.file.*;
class Solution {
    public String simplifyPath(String path) {
       return Paths.get(path).normalize().toString();
    }
}

第二种:正则表达式

思路:先使用split()分割字符串,清除‘/‘,‘//‘,‘///’等等斜杠字符。

然后处理‘.‘与‘..‘字符,对于‘.‘字符,不记入答案,对于‘..‘字符,如果答案前面有字符串,删除前面一个字符串,对于其他字符,则加入答案。

class Solution {
    public String simplifyPath(String path) {
        String[] strs=path.split("/+");
        ArrayList<String> ans=new ArrayList<>();
        for(int i=1;i<strs.length;i++) {
            if(strs[i].equals(".")) continue;
            else if(strs[i].equals("..")) {
                if(!ans.isEmpty()) ans.remove(ans.size()-1);
            }
            else ans.add("/"+strs[i]);
        }
        if(ans.isEmpty()) return "/";
        String res="";
        for(String e:ans)
            res+=e;
        return res;
    }
}

时间和空间复杂度:

时间复杂度:O(N)

空间复杂度:O(N)

第三种:栈

(4)比较自己想的和参考答案的区别

         感受:参考答案更多元化

原文地址:https://www.cnblogs.com/Aiahtwo/p/12229849.html

时间: 2024-10-07 04:50:17

71. Simplify Path做题报告的相关文章

LeetCode开心刷题四十八天——71. Simplify Path

71. Simplify Path Medium 5101348FavoriteShare Given an absolute path for a file (Unix-style), simplify it. Or in other words, convert it to the canonical path. In a UNIX-style file system, a period . refers to the current directory. Furthermore, a do

20. Valid Parentheses做题报告

题目链接: Valid Parentheses 题目大意: 判断字符串s的字符是否满足符号匹配 做题报告: (1)该题涉及的算法与数据结构 栈,哈希表 (2)自己的解答思路+代码+分析时间和空间复杂度 思路: 栈先入后出特点,若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空则表示满足符号匹配,输出true,否则输出false 代码: import java.util.Stack; class Solution { public boolean isVa

1047. Remove All Adjacent Duplicates In String做题报告

题目链接: Remove All Adjacent Duplicates In String 题目大意: 删除字符串中的所有相邻字符 做题报告: (1)该题涉及的算法与数据结构 栈 (2)自己的解答思路+代码+分析时间和空间复杂度 Input: "abbaca" Output: "ca"          思路:使用栈,对字符串遍历,进行入栈出栈操作.如果栈空或者遍历到的该字符与栈顶元素不同则入栈,否则(即遍历到的该字符与栈顶元素相同)出栈.最后,栈存的字符就是我们

做题报告模板

题目链接: Remove All Adjacent Duplicates In String 题目大意: .... 做题报告: (1)该题涉及的算法与数据结构 ... (2)自己的解答思路+代码+分析时间和空间复杂度 (3)大神们的解答思路+代码+分析时间和空间复杂度 时间和空间复杂度: 时间复杂度:O( ) 空间复杂度:O( ) (4)比较自己想的和参考答案的区别 原文地址:https://www.cnblogs.com/Aiahtwo/p/12228711.html

94. Binary Tree Inorder Traversal 做题报告

题目链接: 94. Binary Tree Inorder Traversal 题目大意: 二叉树的中序遍历 做题报告: (1)该题涉及的算法,数据结构以及相关知识点 递归 (2)自己的解答思路+代码+分析时间和空间复杂度 递归思路 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) {

leetCode 71.Simplify Path(化简路径) 解题思路和方法

Simplify Path Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" click to show corner cases. Corner Cases: Did you consider

leetcode 71 Simplify Path

题目连接 https://leetcode.com/problems/simplify-path/ Simplify Path Description Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"

【一天一道LeetCode】#71. Simplify Path

一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", => "/home" path = "/a/./b/../../c/", =

71. Simplify Path压缩文件的绝对路径

[抄题]: Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c" [暴力解法]: 时间分析: 空间分析: [优化后]: 时间分析: 空间分析: [奇葩输出条件]: [奇葩corner case]: Cor