学渣带你刷Leetcode0071简化路径

编程入门 行业动态 更新时间:2024-10-07 12:24:58

学渣<a href=https://www.elefans.com/category/jswz/34/1769690.html style=带你刷Leetcode0071简化路径"/>

学渣带你刷Leetcode0071简化路径

题目描述

以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径

请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

 

示例 1:

输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。
示例 2:

输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
示例 3:

输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
示例 4:

输入:"/a/./b/../../c/"
输出:"/c"
示例 5:

输入:"/a/../../b/../c//.//"
输出:"/c"
示例 6:

输入:"/a//bc/d//././/.."
输出:"/a/b/c"

来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

白话题目:
 

算法:

 

详细解释关注 B站  【C语言全代码】学渣带你刷Leetcode 不走丢 

C语言完全代码

//方法一:分情况处理
#define     STATE_0     0       // "/"
#define     STATE_1     1       // "./"
#define     STATE_2     2       // "../"
#define     STATE_3     3       // "abc"/"
#define     STATE_4     4       // 其他char * simplifyPath(char * path){int     i       = 0;int     j       = 0;int     iLen    = strlen(path);char*   pRet    = NULL;int     iLpos   = 0;bool    bLFlag  = false;int     iPos    = 0;int     iState  = STATE_0;pRet = (char*)malloc(sizeof(char) * (iLen + 1));memset(&pRet[0], 0x00, sizeof(char) * (iLen + 1));pRet[0] = '/';iLpos = 1;iPos = 1;for (i = 0; i < iLen; i++){for (j = i; j < iLen; j++){if (path[j] == '/'){//滑窗结束break;}else if (path[j] == '.'){if (iState == STATE_0){iState = STATE_1;}else if (iState == STATE_1){iState = STATE_2;}else{iState = STATE_4;}}else{iState = STATE_3;}}//        printf("[1][iLen=%d][i=%d][j=%d][ipos=%d][iState=%d]\n", iLen, i, j, iPos, iState);switch(iState){case STATE_0 ://不处理break;case STATE_1 ://不处理break;case STATE_2 ://退回到上一个目录
//                printf("[2][i=%d][j=%d][ipos=%d][iLpos=%d][iState=%d][%s]\n", i, j, iPos, iLpos, iState, pRet);for (iLpos = iPos; iLpos >= 1; iLpos--){if (pRet[iLpos] == '/'){if (!bLFlag){bLFlag = true;}else{break;}}}bLFlag = false;iPos = iLpos + 1;memset(&pRet[iPos], 0x00, sizeof(char) * (iLen - iPos));break;case STATE_3 :case STATE_4 ://将有效目录放入返回目录中memcpy(&pRet[iPos], &path[i], sizeof(char) * (j - i + 1));iLpos = iPos;iPos += j - i + 1;break;default:break;}iState = STATE_0;i = j;}//    printf("[3][i=%d][j=%d][ipos=%d][iState=%d][%s]\n", i, j, iPos, iState, pRet);if (iPos > 1){pRet[iPos - 1] = '\0';}return pRet;
}

 

更多推荐

学渣带你刷Leetcode0071简化路径

本文发布于:2024-02-27 19:20:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1766211.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:带你   路径

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!