题解47 | 山重水复疑无路,点点杠杠又一村#简化目录路径#
简化目录路径
https://www.nowcoder.com/practice/3177bcbfd947409ba833efb5a5b4a24c
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param path string字符串 * @return string字符串 */ string simplifyPath(string path) { // write code here string ans, beta; //如果路径的最后不是'/',则在路径字符串的最后添加上'/',这样才可以处理最后一个路径 if (path.back() != '/') { path += '/'; } for (auto c : path) { if (c != '/') { beta += c; } else { if (beta == "..") { //情况1:如果当前记录的b是两个点,则返回上一层的目录, while (ans.size() && ans.back() != '/') { ans.pop_back(); } //再判断一下如果a不为空,就将/也弹出 if (ans.size()) { ans.pop_back(); } } //情况2:如果b不是'.'且b不为空,就将b记录的英文字符串的前面添加一个‘/’ else if (beta != "." && beta != "") { ans += '/' + beta; } beta.clear(); //每次将记录路径的英文字符清空 } } if (ans.empty()) ans = '/'; return ans; } };
基本算法思想:
给定一个路径字符串,要求简化该路径并返回简化后的路径字符串。
简化路径的规则如下:
- 使用'/'作为路径分隔符。
- '.' 表示当前目录,'..' 表示上级目录。
- 连续的多个'/'视为一个'/'。
- 最后一个字符不是'/'。
具体实现思路如下:
1. 创建一个空字符串 `ans` 用于存储简化后的路径。
2. 如果路径的最后一个字符不是'/',则在路径字符串的最后添加'/',以便处理最后一个路径。
3. 遍历路径字符串中的每个字符:
- 如果字符不是'/',将其加入临时字符串 `beta` 中。
- 如果字符是'/',则根据 `beta` 的值进行判断:
- 如果 `beta` 是 "..",则需要返回上一级目录,即将 `ans` 中的最后一个路径删除。
- 如果 `beta` 不是 "." 且不为空字符串,将 `beta` 添加到 `ans` 中,并在前面加上'/'。
- 清空 `beta`,准备记录下一个路径。
4. 如果 `ans` 是空字符串,则将其设置为'/'。
5. 返回 `ans`。
时间复杂度:
O(n)其中 n 是路径字符串的长度。需要遍历路径字符串中的每个字符。
空间复杂度:
O(n)需要额外的空间存储临时字符串 `beta` 和简化后的路径 `ans`。
2024考研数据结构 文章被收录于专栏
本人考研刷算法题,立此专栏练习强化。