LeetCode 71. 简化路径 Simplify Path(C语言)
发布时间:2022-10-12 11:15:42 所属栏目:Unix 来源:
导读: 题目描述:
给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如unix路径简化,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
边界情况:
给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如unix路径简化,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
边界情况:
|
题目描述: 给定一个文档 (Unix-style) 的完全路径,请进行路径简化。 例如unix路径简化, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" 边界情况: 题目解答: 方法1:栈 每次确定两个/之间的内容,对其进行判断,只有4种情况,空、只有一个.、只有两个.、正常路径。但由于最后可能不是以/结束的,所以可以认为结束符\0和/等价。另外第三种情况判断是否可以出栈,第四种情况入栈。最后合并结果。 运行时间4ms,代码如下。 char* simplifyPath(char* path) { if(path == NULL || path[0] == NULL || path[1] == NULL) return path; char* stack[100] = { 0 }; int len[100] = { 0 }; int top = 0, i = 1; int start = 0, length = 0; bool flag = false; int pathLen = strlen(path); 政府职能冲突的解决路径除了流程路径外 还包括_unix路径简化_unix网络编程 while(i <= pathLen) { if(path[i] == '/' || path[i] == '\0') { length = i - start; if(length == 1) start = i; else if(length == 2 && path[i - 1] == '.') start = i; else if(length == 3 && path[i - 1] == '.' && path[i - 2] == '.') { start = i; if(top > 0) top--; } else { stack[top++] = path + start; len[top - 1] = length; start = i; } } i++; } char* result = (char*)malloc((pathLen + 1) * sizeof(char)); if(top <= 0) { result[0] = '/'; result[1] = '\0'; return result; } length = 0; for(i = 0; i < top; i++) { memcpy(result + length, stack[i], len[i] * sizeof(char)); length = length + len[i]; } result[length] = '\0'; return result; } (编辑:我爱制作网_池州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330577号