LeetCode: Simplify Path
改了很多次,这种麻烦的题目就是考你有没有考虑到所有情况
1 class Solution { 2 public: 3 string simplifyPath(string path) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 vector<string> S; 7 string tmp = ""; 8 for (int i = 0; i < path.size(); i++) { 9 if (path[i] == '/') { 10 if (!tmp.size()) continue; 11 else { 12 if (tmp == "..") { 13 if (S.size()) S.pop_back(); 14 } 15 else if (tmp != ".") S.push_back(tmp); 16 tmp = ""; 17 } 18 } 19 else tmp = tmp + path[i]; 20 } 21 if (tmp.size()) { 22 if (tmp == ".") ; 23 else if (tmp == "..") { 24 if (S.size()) S.pop_back(); 25 } 26 else S.push_back(tmp); 27 } 28 string ret = ""; 29 for (int i = 0; i < S.size(); i++) { 30 ret = ret + "/" + S[i]; 31 } 32 if (!ret.size()) return "/"; 33 return ret; 34 } 35 };
C#
1 public class Solution { 2 public string SimplifyPath(string path) { 3 Stack<string> S = new Stack<string>(); 4 string tmp = ""; 5 for (int i = 0; i < path.Length; i++) { 6 if (path[i] == '/') { 7 if (tmp.Length == 0) continue; 8 else { 9 if (tmp == "..") { 10 if (S.Count > 0) S.Pop(); 11 } 12 else if (tmp != ".") S.Push(tmp); 13 tmp = ""; 14 } 15 } 16 else tmp += path[i]; 17 } 18 if (tmp.Length > 0) { 19 if (tmp == ".") ; 20 else if (tmp == "..") { 21 if (S.Count > 0) S.Pop(); 22 } 23 else S.Push(tmp); 24 } 25 string ans = ""; 26 while (S.Count > 0) { 27 ans = S.Peek() + "/" + ans; 28 S.Pop(); 29 } 30 if (ans.Length == 0) return "/"; 31 ans = "/" + ans; 32 return ans.Substring(0, ans.Length - 1); 33 } 34 }