题目描述
给一个Unix风格的绝对路径,简化他。注意的是绝对路径以/开始(root 目录),( . )代表当前的目录,( .. )代表父目录。
例如:
-
"/a/./" --> 表示停留在当前 'a' -
"/a/b/.." --> 表示跳转到父目录,from 'b' to 'a' -
"////" --> 连续多个 '/' 是有效的路径,等于单个'/' -
-
Input : /home/ -
Output : /home -
-
Input : /a/./b/../../c/ -
Output : /c -
-
Input : /a/.. -
Output : / -
-
Input : /a/../ -
Ouput : / -
-
Input : /../../../../../a -
Ouput : /a -
-
Input : /a/./b/./c/./d/ -
Ouput : /a/b/c/d -
-
Input : /a/../.././../../. -
Ouput : / -
-
Input : /a//b//c//////d -
Ouput : /a/b/c/d
注意:大家可以在自己的终端试试,就很容易理解这道题意了。
灵感示意图
第一步 先把字符串拆分成数组根据( / )

第二步 把目录元素入栈

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

主要代码
-
- (NSString *)simplifyPath
NSString *)inputStr -
{ -
-
NSMutableString *dirStr = [@"" mutableCopy]; -
//1 -
[dirStr appendString:@"/"]; -
//2 -
NSMutableArray *dirArray = [[inputStr componentsSeparatedByString:@"/"] mutableCopy]; -
//3 -
DSStack *newStack = [[DSStack alloc] initWithSize:20]; -
-
for (int i = 0 ; i < dirArray.count; i++) -
{ -
//4 -
while ([dirArray[i] isEqualToString:@""]) -
{ -
i++; -
} -
//5 -
while (i < dirArray.count && ![dirArray[i] isEqualToString:@""]) -
{ -
if ([dirArray[i] isEqualToString:@"."]) -
{ -
-
} -
else if ([dirArray[i] isEqualToString:@".."]) -
{ -
if (![newStack isEmpty]) { -
[newStack popLastObject]; -
} -
} -
else -
{ -
[newStack push:dirArray[i]]; -
-
} -
i++; -
} -
} -
//6 -
DSStack *newStack1 = [[DSStack alloc] initWithSize:20]; -
while (![newStack isEmpty]) -
{ -
[newStack1 push:[newStack popLastObject]]; -
} -
//7 -
while (![newStack1 isEmpty]) -
{ -
if ([newStack1 sizeOfStack]!= 1) -
{ -
[dirStr appendFormat:@"%@/",[newStack1 popLastObject]]; -
} -
else -
-
{ -
[dirStr appendFormat:@"%@",[newStack1 popLastObject]]; -
-
} -
} -
-
return dirStr; -
}
思路描述
-
根路径是必须有一个( / )
-
根据( / )拆分字符串,目的为了后面把多个( / )变成单个( / )
-
创建一个栈结构
-
循环遍历数组如果元素是空字符串,index向后移动
-
把非空的元素目录比如a,b入栈。当碰到( . )不做操作,如果遇到( .. )如果栈不为空则出栈
-
创建一个辅助栈,reverse刚开始的那个栈,便于拼接字符串
-
拼接栈内的元素,但第一个不需要后缀( / )
交流群昵称: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
5万+

被折叠的 条评论
为什么被折叠?



