solution.json 3.8 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
{
  "type": "code_options",
  "author": "csdn.net",
  "source": "solution.md",
  "exercise_id": "8232cb862b314d8690c5c5c7f315f1a7",
  "keywords": "栈,字符串",
  "title": "简化路径",
  "desc": [
    {
      "content": "\n<p>给你一个字符串 <code>path</code> ,表示指向某一文件或目录的 Unix 风格 <strong>绝对路径 </strong>(以 <code>'/'</code> 开头),请你将其转化为更加简洁的规范路径。</p><p class=\"MachineTrans-lang-zh-CN\">在 Unix 风格的文件系统中,一个点(<code>.</code>)表示当前目录本身;此外,两个点 (<code>..</code>) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,<code>'//'</code>)都被视为单个斜杠 <code>'/'</code> 。 对于此问题,任何其他格式的点(例如,<code>'...'</code>)均被视为文件/目录名称。</p><p>请注意,返回的 <strong>规范路径</strong> 必须遵循下述格式:</p><ul>\t<li>始终以斜杠 <code>'/'</code> 开头。</li>\t<li>两个目录名之间必须只有一个斜杠 <code>'/'</code> 。</li>\t<li>最后一个目录名(如果存在)<strong>不能 </strong>以 <code>'/'</code> 结尾。</li>\t<li>此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 <code>'.'</code> 或 <code>'..'</code>)。</li></ul><p>返回简化后得到的 <strong>规范路径</strong> 。</p><p> </p><p><strong>示例 1:</strong></p><pre><strong>输入:</strong>path = \"/home/\"<strong><br />输出:</strong>\"/home\"<strong><br />解释:</strong>注意,最后一个目录名后面没有斜杠。 </pre><p><strong>示例 2:</strong></p><pre><strong>输入:</strong>path = \"/../\"<strong><br />输出:</strong>\"/\"<strong><br />解释:</strong>从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。</pre><p><strong>示例 3:</strong></p><pre><strong>输入:</strong>path = \"/home//foo/\"<strong><br />输出:</strong>\"/home/foo\"<strong><br />解释:</strong>在规范路径中,多个连续斜杠需要用一个斜杠替换。</pre><p><strong>示例 4:</strong></p><pre><strong>输入:</strong>path = \"/a/./b/../../c/\"<strong><br />输出:</strong>\"/c\"</pre><p> </p><p><strong>提示:</strong></p><ul>\t<li><code>1 <= path.length <= 3000</code></li>\t<li><code>path</code> 由英文字母,数字,<code>'.'</code>,<code>'/'</code> 或 <code>'_'</code> 组成。</li>\t<li><code>path</code> 是一个有效的 Unix 风格绝对路径。</li></ul>",
      "language": "markdown"
    }
  ],
  "answer": [
    {
      "content": "",
      "language": "java"
    }
  ],
  "prepared": [
    [
      {
        "content": "",
        "language": "java"
      }
    ],
    [
      {
        "content": "",
        "language": "java"
      }
    ],
    [
      {
        "content": "",
        "language": "java"
      }
    ]
  ],
  "template": {
    "content": "class Solution {\n\tpublic String simplifyPath(String path) {\n\n\t\tDeque<String> stack = new ArrayDeque<>();\n\n\t\tfor (String str : path.split(\"/\")) {\n\n\t\t\tif (\"\".equals(str) || \".\".equals(str))\n\t\t\t\tcontinue;\n\t\t\tstack.push(str);\n\t\t}\n\n\t\tStringBuilder sb = new StringBuilder();\n\t\tint count = 0;\n\t\twhile (!stack.isEmpty()) {\n\t\t\tString str = stack.pop();\n\n\t\t\tif (\"..\".equals(str))\n\t\t\t\tcount++;\n\t\t\telse {\n\n\t\t\t\tif (count > 0) {\n\t\t\t\t\tcount--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tsb.insert(0, str);\n\t\t\t\tsb.insert(0, \"/\");\n\t\t\t}\n\t\t}\n\n\t\tif (sb.length() == 0)\n\t\t\tsb.append(\"/\");\n\n\t\treturn sb.toString();\n\t}\n}\n",
    "language": "java"
  },
  "node_id": "dailycode-f7794a1f875c4fbdb5c90aa69bbb1d1c",
  "license": "csdn.net",
  "created_at": 1637894159,
  "topic_link": "https://bbs.csdn.net/topics/600470830"
}