最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【Daily Interview】- 10 简化路径

    正文概述 掘金(初心Yearth)   2020-12-24   350

    题目

    【Daily Interview】- 10 简化路径
    图片1

    !! 题目来源:简化路径 - 力扣

    分析

    这题乍一看有些复杂,但其实仔细把几个示例看过之后就会发现,实际上需要处理的情况并不多,无非是:

    • null
    • .
    • ..
    • path

    而怎么处理它们呢?相比做过有效括号的问题之后,大家第一时间就能想到利用栈来帮助我们解决问题:

    • 遇到 null.,不做处理
    • 遇到 path,将 path 入栈
    • 遇到 ..,出栈

    这样一来,代码就很容易实现了:

    var simplifyPath = function (path) {
      const stack = [];
      const pathArr = path.split("/");
      for (let i = 0; i < pathArr.length; i++) {
        const p = pathArr[i];
        if (p === "..") {
          stack.pop();
        } else if (p === "." || p === "") {
          continue;
        } else {
          stack.push(p);
        }
      }
      return "/" + stack.join("/");
    };

    结果如下:

    【Daily Interview】- 10 简化路径
    图片2

    优化

    上面的代码看着尚不算太丑,是因为总共需要处理的逻辑不多,假如这里我们还需要处理额外的逻辑,比如遇到 ~,认为是 /home/user,那么我们就只能新增额外的条件分支,以至后期代码逐渐变得庞大混乱,难以维护。

    这里我们可以用策略模式进行优化:

    var simplifyPath = function (path) {
      const stack = [];
      const pathArr = path.split("/");
      const strategy = {
        "": stack => stack,
        ".": stack => stack,
        "..": stack => stack.pop()
      };

      for (let i = 0; i < pathArr.length; i++) {
        const p = pathArr[i];
        if (p in strategy) {
          strategy[p](stack);
        } else {
          stack.push(p);
        }
      }
      return "/" + stack.join("/");
    };

    结果如下:

    【Daily Interview】- 10 简化路径
    图片3

    起源地下载网 » 【Daily Interview】- 10 简化路径

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元