今天继续刷leetcode,第72题,unix的路径简化
分析:
将路径按照‘/’分割,然后借助栈,
如果是’.’,继续遍历;
如果是’…’,就出栈;
如果都不是,就入栈;
最后将栈内元素用’/’,进行连接。
问题:
1、c++中巧妙的运用getline函数;
附上c++代码:
class Solution {
public:
string simplifyPath(string path) {
vector<string> nodes;
vector<string> st;
string res;
split(path,'/',nodes);
for(auto node:nodes)
{
if(node=="" || node==".")
continue;
if(node==".." && !st.empty())
st.pop_back();
else if(node!="..")
st.push_back(node);
}
for(auto s:st)
res+='/'+s;
return res.empty()?"/":res;
}
void split(string path,char item,vector<string> &nodes)
{
string temp;
stringstream ss(path);
while(getline(ss,temp,item))
nodes.push_back(temp);
}
};
附上python代码:
class Solution:
def simplifyPath(self, path: str) -> str:
res=[]
path=[p for p in path.split('/') if p]
for item in path:
if item=='.':
continue
elif item=='..':
if len(res):
res.pop()
else:
res.append(item)
return '/'+'/'.join(res)