题目意思:翻译路径,题目给一个路径,你按规则翻译成另外的路径
split函数
https://baike.baidu.com/item/split%E5%87%BD%E6%95%B0/6628136
C++ push方法与push_back方法
(1)顺序性容器:各元素之间有顺序关系的线性表,是一种线性关系的有序集群,顺序容器中的元素均有固定的位置,除非用删除和插入来改变它的位置,这个位置和元素本身无关,和操作时间和地点有关。
vector:从后面快速删除和插入,访问任一元素;
思路:分情况解决
1.
任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’
if(path[i] == '/'){
i++;
}
两个点 (…) 表示将目录切换到上一级(指向父目录);
if(s == ".." && !temp.empty()) {
temp.pop_back();//如果检测到"..",返回上一级目录
}
一个点(.)表示当前目录本身
else if(s != "." && s != ".."){
temp.push_back(s);//保存在栈中
}
4.最后的处理
if(temp.empty()){
return "/";
};
string res;
for(string& s: temp){
res += "/" + s;
}
return res;
class Solution {
public:
string simplifyPath(string path) {
vector<string> temp;
int len = path.size();
for(int i = 0; i < len; ){
if(path[i] == '/'){
i++;
}
//如果检测到路径中'/',i++
else{
int now_index = i;//用来记录目录开始的位置
while(i < len && path[i] != '/') {
i++;
}
string s = path.substr(now_index, i - now_index);//取目录
if(s == ".." && !temp.empty()) {
temp.pop_back();//如果检测到"..",返回上一级目录
}
else if(s != "." && s != ".."){
temp.push_back(s);//保存在栈中
}
}
}
if(temp.empty()){
return "/";
};
string res;
for(string& s: temp){
res += "/" + s;
}
return res;
}
};