(LeetCode 面试经典 150 题)71. 简化路径 (字符串)
71. 简化路径
思路:字符串,时间复杂度0(n)。
处理出‘/’之间的字符串,然后进行判断即可。
C++版本:
class Solution {
public:string simplifyPath(string path) {int n=path.size();vector<string> v;string tmp="";for(int i=0;i<n;i++){while(i<n&&path[i]=='/') i++;while(i<n&&path[i]!='/'){tmp.push_back(path[i]);i++;}if(tmp=="."){}else if(tmp==".."){if(v.size()>0){v.pop_back();}}else if(tmp!=""){v.push_back(tmp);}tmp="";}string s="/";for(int i=0;i<v.size();i++){s+=v[i];if(i!=v.size()-1) s.push_back('/');}return s;}
};
JAVA版本:
class Solution {public String simplifyPath(String path) {int n=path.length();List<String> v=new ArrayList<>();String tmp="";char[] c=path.toCharArray();for(int i=0;i<n;i++){while(i<n&&c[i]=='/') i++;while(i<n&&c[i]!='/'){tmp+=c[i];i++;}if(tmp=="."){}else if(tmp==".."){if(v.size()>0){v.remove(v.size()-1);}}else if(tmp!=""){v.add(tmp);}tmp="";}String s="/";for(int i=0;i<v.size();i++){s+=v.get(i);if(i!=v.size()-1) s+="/";}return s;}
}
GO版本:
func simplifyPath(path string) string {parts:=strings.Split(path,"/")v:=[]string{}for _,x:=range parts {if x=="" || x=="." {continue}else if x==".." {if len(v)>0 {v=v[:len(v)-1]}}else{v=append(v,x)}}return "/"+strings.Join(v,"/")
}