100天iOS数据结构与算法实战 Day06 – 栈的算法实战 Simplify Path

题目描述

给一个Unix风格的绝对路径,简化他。注意的是绝对路径以/开始(root 目录),( . )代表当前的目录,( .. )代表父目录。

例如:


 
  1. "/a/./"   --> 表示停留在当前 'a'

  2. "/a/b/.." --> 表示跳转到父目录,from 'b' to 'a'

  3. "////"    --> 连续多个 '/' 是有效的路径,等于单个'/'

  4.  

  5. Input : /home/

  6. Output : /home

  7.  

  8. Input : /a/./b/../../c/

  9. Output : /c

  10.  

  11. Input : /a/..

  12. Output : /

  13.  

  14. Input : /a/../

  15. Ouput : /

  16.  

  17. Input : /../../../../../a

  18. Ouput : /a

  19.  

  20. Input : /a/./b/./c/./d/

  21. Ouput : /a/b/c/d

  22.  

  23. Input : /a/../.././../../.

  24. Ouput : /

  25.  

  26. Input : /a//b//c//////d

  27. Ouput : /a/b/c/d

注意:大家可以在自己的终端试试,就很容易理解这道题意了。

灵感示意图

第一步 先把字符串拆分成数组根据( / )

QQ截图20190409104615.png

第二步 把目录元素入栈

QQ图片20190409111451.gif

第三步 把原始栈reverse,最后把reverse的栈元素一一出栈并拼接

QQ截图20190409104653.png

主要代码


 
  1. - (NSString *)simplifyPath?NSString *)inputStr

  2. {

  3.  

  4.    NSMutableString *dirStr = [@"" mutableCopy];

  5.    //1

  6.    [dirStr appendString:@"/"];

  7.     //2

  8.    NSMutableArray *dirArray = [[inputStr componentsSeparatedByString:@"/"] mutableCopy];

  9. //3

  10.    DSStack *newStack = [[DSStack alloc] initWithSize:20];

  11.  

  12.    for (int i = 0 ; i < dirArray.count; i++)

  13.    {

  14.     //4

  15.        while ([dirArray[i] isEqualToString:@""])

  16.        {

  17.            i++;

  18.        }

  19.         //5

  20.        while (i < dirArray.count && ![dirArray[i] isEqualToString:@""])

  21.        {

  22.            if ([dirArray[i] isEqualToString:@"."])

  23.            {

  24.  

  25.            }

  26.            else if ([dirArray[i] isEqualToString:@".."])

  27.            {

  28.                if (![newStack isEmpty]) {

  29.                    [newStack popLastObject];

  30.                }

  31.            }

  32.            else

  33.            {

  34.                [newStack push:dirArray[i]];

  35.  

  36.            }

  37.            i++;

  38.        }

  39.    }

  40.     //6

  41.    DSStack *newStack1 = [[DSStack alloc] initWithSize:20];

  42.    while (![newStack isEmpty])

  43.    {

  44.        [newStack1 push:[newStack popLastObject]];

  45.    }

  46.     //7

  47.    while (![newStack1 isEmpty])

  48.    {

  49.        if ([newStack1 sizeOfStack]!= 1)

  50.            {

  51.                [dirStr appendFormat:@"%@/",[newStack1 popLastObject]];

  52.            }

  53.        else

  54.  

  55.        {

  56.            [dirStr appendFormat:@"%@",[newStack1 popLastObject]];

  57.  

  58.        }

  59.    }

  60.  

  61.    return dirStr;

  62. }

思路描述

  1. 根路径是必须有一个( / )

  2. 根据( / )拆分字符串,目的为了后面把多个( / )变成单个( / )

  3. 创建一个栈结构

  4. 循环遍历数组如果元素是空字符串,index向后移动

  5. 把非空的元素目录比如a,b入栈。当碰到( . )不做操作,如果遇到( .. )如果栈不为空则出栈

  6. 创建一个辅助栈,reverse刚开始的那个栈,便于拼接字符串

  7. 拼接栈内的元素,但第一个不需要后缀( / )

 

 

  交流群昵称:ios-Swift/Object C开发上架
交流群号: 869685378   找ios马甲包开发者合作,有兴趣请添加Q 51259559

 

  • 100天iOS数据结构与算法实战 Day01

  • 100天iOS数据结构与算法实战 Day02 – 栈

  • 100天iOS数据结构与算法实战 Day03 – 栈的算法实战 Valid Parentheses

  • 100天iOS数据结构与算法实战 Day04 – 栈的算法实战 逆波兰表示法

  • 100天iOS数据结构与算法实战 Day05 – 栈的算法实战 Evaluate Reverse Polish Nota

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑用户体验的优化,从而提升整体开发效率软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值