力扣算法题—071简化路径
以 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"
1 #include "_000库函数.h" 2 3 4 //一开始不知道从何下手 5 //感觉是用栈,所以用vector来代替栈 6 7 class Solution { 8 public: 9 string simplifyPath(string path) { 10 vector<string>v; 11 string s = "";//用来记录临时路径 12 int n = 0;//记录‘.’的个数 13 for (int i = 0; i < path.size(); ++i) { 14 if (path[i] == '.') 15 ++n; 16 else if (path[i] != '/') {//记录次级目录 17 s.insert(s.end(), n, '.');//防止有些目录名是以.开头!! 18 n = 0; 19 s += path[i]; 20 } 21 else {//path[i] == '/' 22 if (n > 2) 23 s.insert(s.end(), n, '.'); 24 else if (n == 2 && !v.empty())//确保不是在根目录 25 v.pop_back();// 跳到上一级 26 27 n = 0; 28 if (s.size() > 0) 29 v.push_back(s); 30 s = ""; 31 } 32 33 } 34 if (n > 2) 35 s.insert(s.end(), n, '.'); 36 else if (n == 2 && !v.empty())//确保不是在根目录 37 v.pop_back();// 跳到上一级 38 if (s.size() > 0) 39 v.push_back(s); 40 s = ""; 41 for (int i = 0; i < v.size(); ++i)//之所以从1开始,是去除根目录的‘/’ 42 s = s + "/" + v[i]; 43 if (!s.empty())return s; 44 return "/"; 45 } 46 }; 47 48 //C++中有专门处理字符串的机制,我们可以使用stringstream来分隔字符串, 49 //然后对每一段分别处理,思路和上面的方法相似,参见代码如下: 50 // 51 52 class Solution { 53 public: 54 string simplifyPath(string path) { 55 string res, t; 56 stringstream ss(path); 57 vector<string> v; 58 while (getline(ss, t, '/')) { 59 if (t == "" || t == ".") continue; 60 if (t == ".." && !v.empty()) v.pop_back(); 61 else if (t != "..") v.push_back(t); 62 } 63 for (string s : v) res += "/" + s; 64 return res.empty() ? "/" : res; 65 } 66 }; 67 68 69 70 void T071() { 71 Solution s; 72 string str; 73 str = "/home/"; 74 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 75 str = "/../"; 76 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 77 str = "/home//foo/"; 78 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 79 str = "/a/./b/../../c/"; 80 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 81 str = "/a/../../b/../c//.//"; 82 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 83 str = "/a//bc/d//././/.."; 84 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 85 str = "/..."; 86 cout << "输入:" << str << endl << "输出:" << s.simplifyPath(str) << endl; 87 88 }
转载于:https://www.cnblogs.com/zzw1024/p/10701397.html
力扣算法题—071简化路径相关推荐
- 程序员面试需要刷力扣算法题吗
这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...
- LeetCode -- 力扣算法题解题心得 -- (个人笔记记录)持续更新~~
一.前言 正式开启数据结构+算法研究的历程,准备好一年后的面试.下面的解法不一定是最优解,只求能力提升,会定期更新~~ 二.目录 1 2 19 20 21 24 35 42 83 86 94 96 1 ...
- 力扣算法题—042接雨水
1 #include"000库函数.h" 2 //一点头绪都没有 3 //然后就自己按自己的意思来一遍 4 //好像没有用算法 5 //16ms,让我激动一把 6 7 class ...
- “宝石与石头”:一道简单却巧妙的力扣算法题
本篇博客会讲解力扣"771. 宝石与石头"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示: 本题可以使用数组模拟哈希表来实现.先把宝石字符串中的字符标识到数组 ...
- 力扣算法题-19.秋叶收藏集 C语言实现
题目 小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片 ...
- 力扣算法题,第N个神奇数字(Python)
878.第N个神奇数字 题目描述: 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + ...
- 力扣算法题—075颜色分类
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- 力扣算法题—073矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [[1,1,1],[1,0,1],[1,1,1] ] 输出: [[1,0, ...
- 力扣算法题—074搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...
最新文章
- python ftp文件传输服务端
- OVS之vhost-net中VM通信(九)
- OpenGL教程——GLUT初始化
- 使用SAP HANA Web-based Development Workbench进行SQLScript练习
- android browser 书签 路径,Android Browser学习七 书签历史模块: 书签UI的实现(2)
- [深度学习] 分布式Pytorch介绍(三)
- poj 1904 King's Quest 强连通分量+匹配
- leetcode784题:字母大小写全排列
- Windows 7 With SP1 MSDN版 含简体中文版
- pytorch 生成随机数Tensor的方法 torch.rand torch.randn torch.normal torch.linespace
- db_cxx.h: No such file or directory
- 法律咨询小程序开发制作(律师事务所小程序)
- 增量学习(Incremental Learning)小综述
- STM32 SPI 主模式下配置(神州三号开发板spi.c解析上)
- STM8单片机低功耗---活跃停机(Active Halt)模式实现-2
- 有益视力的食疗方法(转载)
- 小程序实现身份证取景框拍摄-uniapp版
- Java项目开发如何设计整体架构
- ale插件 vim_Vim中异步语法检查ale配置
- php繁体网站配置,php网页是繁体字怎么办
热门文章
- python自动化办公模块_Python 自动化办公之 Excel 模块 — openpyxl 的基本使用!
- cesium 原生抛物线
- ipad python编程软件_在iPad中运行Python
- acs712电流检测怎么用_工程师都用这个巧妙廉价的电流检测电路!
- Java equalsIgnoreCase() 方法
- js 键盘事件 理解
- jdbc如何使用oracle数据库连接池,使用JDBC连接池技术连接Oracle数据库
- 接口带声音输出吗_智能化时代,你的功放跟得上科技的脚步吗?
- 江苏省2021年高考成绩查询有分数吗,2021年江苏省高考成绩查询入口
- linux 22 口令自动传马,近期用到的linux命令