5、简化路径
给定一个文档(Unix-style)
的完全路径,请将路径简化
示例:
PATH="/home/"
=>"/home"
*PATH="/a/./b/../../c/"
=>"/c"
边界情况:
你是否考虑了 路径 = "/../" 的情况?
在这种情况下,你需返回 "/" 。
此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。
在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。
Solution:
class Solution {
public:
string simplifyPath(string path) {
string res;
vector<string>temp;
vector<string>pathTemp;
int pathWordSize=0;
string str;
int word=0;
int i;
for(i=0;i<path.size();i++){
if(path[i]=='/'){
if(word){
str=path.substr(i-pathWordSize,pathWordSize);
temp.push_back(str);
pathWordSize=0;
word=0;
}
else
continue;
}
else{
word=1;
pathWordSize++;
}
}
if(word){
str=path.substr(i-pathWordSize,pathWordSize);
temp.push_back(str);
}
for(i=0;i<temp.size();i++){
if(temp[i]=="."){
continue;
}
else if(temp[i]==".."){
if(pathTemp.size()>0)
pathTemp.pop_back();
else
continue;
}
else{
pathTemp.push_back(temp[i]);
}
}
if(pathTemp.size()==0){
res+='/';
return res;
}
for(i=0;i<pathTemp.size();i++){
res=res+'/'+pathTemp[i];
}
return res;
}
};
思路:
这道题还是蛮难的,主要的思路还是跟提取字符串中的单词差不多,用到了栈的思想。首先对path
进行处理,提取出有用的词,主要就是用’/‘分割字符串,连续的’/'忽略,然后对提取出的词进行处理,如果是.
则不做处理,如果是..
则出栈一个字符,最后将剩下的词处理成字符串返回就行了。