山东建站商城,怎么做网站流量竞品分析,wordpress register_setting,wordpress数据库域名题目
给你一个字符串 path #xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 #xff08;以 / 开头#xff09;#xff0c;请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中#xff0c;一个点#xff08;.#xff09;表示当前目录本身#xff1…题目
给你一个字符串 path 表示指向某一文件或目录的 Unix 风格 绝对路径 以 / 开头请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中一个点.表示当前目录本身此外两个点 .. 表示将目录切换到上一级指向父目录两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠即//都被视为单个斜杠 / 。 对于此问题任何其他格式的点例如...均被视为文件/目录名称。
请注意返回的 规范路径 必须遵循下述格式
始终以斜杠 / 开头。两个目录名之间必须只有一个斜杠 / 。最后一个目录名如果存在不能 以 / 结尾。此外路径仅包含从根目录到目标文件或目录的路径上的目录即不含 . 或 ..。
返回简化后得到的 规范路径 。 示例 1
输入path /home/
输出/home
解释注意最后一个目录名后面没有斜杠。
示例 2
输入path /../
输出/
解释从根目录向上一级是不可行的因为根目录是你可以到达的最高级。示例 3
输入path /home//foo/
输出/home/foo
解释在规范路径中多个连续斜杠需要用一个斜杠替换。示例 4
输入path /a/./b/../../c/
输出/c
C代码
#include iostream
#include deque
#include string
using namespace std;/*
* 用双端队列简化路径
* 使用双指针定位每个目录名的起点和终点提取每一级目录名
* 当遇到..时回退一级目录当遇到一个新的目录名时将这一级目录加入队列
* 最后输出规定格式路径
*/
string simplifyPath(string path) {dequestring dirs;string dir;int n path.size();int start 0;int end;while (start n) {while (start n path[start] /) start;if (start n) break;end start;while (end n path[end] ! /) end;dir path.substr(start, end - start);if (!dirs.empty() dir ..) {dirs.pop_back();}else if (dir ! .. dir ! .) {dirs.emplace_back(dir);}start end;}if (dirs.empty()) return /;string new_path;while (!dirs.empty()) {new_path / dirs.front();dirs.pop_front();}return new_path;
}int main() {string path /ab/./cd/../ef/;string new_path simplifyPath(path);cout new_path endl;return 0;
}
分析
用双端队列简化路径使用双指针定位每个目录名的起点和终点提取每一级目录名当遇到..时回退一级目录当遇到一个新的目录名时将这一级目录加入队列最后输出规定格式路径。 问题
队列 pop_back()删除尾部元素
emplace_back()尾部插入元素
front()引用双端队列容器的第一个元素
pop_front()删除头部元素
substr()复制子字符串