LeetCode71——Simplify Path

冷不防 2022-08-09 17:47 274阅读 0赞

LeetCode71——Simplify Path

依然是恶心的字符串处理,倒不是有多难,是你不知道他有哪些Sample Input,你得把所有的情况考虑进去。。。

我在做的时候就没有考虑非法输入,也就是说,我默认认为给定的输入都是合法的路径名。。。

但是题目会给出/home///near/ 这种非法路径输入,或者是 /home/zhangxiao/…/ 这种,非常恶心。。。

好了,这个题目没啥好说的,维护一个栈,要化简的话,考虑当前目录(一个.)和上级目录(两个.)非法目录 (多个.)

然后斜杠‘/’的情况判断栈顶元素再考虑是否忽略。。。

这题改得一塌糊涂,好在最后通过了

代码:

  1. class Solution {
  2. private:
  3. void remove(string & path)
  4. {
  5. int i = path.size() - 1;
  6. while (i > 0 && path[i] == '/')
  7. {
  8. path.pop_back();
  9. i--;
  10. }
  11. }
  12. public:
  13. string simplifyPath(string path) {
  14. remove(path);
  15. vector<char>tmpResult;
  16. stack<char>symbol;
  17. int dotCount = 0;
  18. for (int i = 0; i < path.size(); i++)
  19. {
  20. if (path[i] == '/')
  21. {
  22. if (!symbol.empty() && symbol.top() == '/')
  23. continue;
  24. symbol.push(path[i]);
  25. }
  26. else if (path[i] == '.')
  27. {
  28. if (path[i + 1] == '.')
  29. {
  30. dotCount = 0;
  31. int j = i;
  32. while (j < path.size() && path[j] == '.')
  33. {
  34. dotCount++;
  35. j++;
  36. }
  37. if (dotCount == 2)
  38. {
  39. if (path[j] == '/'||j==path.size())
  40. {
  41. symbol.pop();//去掉'/'
  42. while (!symbol.empty() && symbol.top() != '/')
  43. symbol.pop();
  44. if (!symbol.empty())
  45. symbol.pop();
  46. i = i + 1;
  47. }
  48. else
  49. {
  50. symbol.push('.');
  51. }
  52. }
  53. else
  54. {
  55. i += dotCount - 1;
  56. while (dotCount--)
  57. {
  58. symbol.push('.');
  59. }
  60. }
  61. }
  62. else if (isalpha(path[i + 1]))
  63. {
  64. symbol.push(path[i]);
  65. continue;
  66. }
  67. }
  68. else
  69. {
  70. symbol.push(path[i]);
  71. }
  72. }
  73. if (symbol.empty())
  74. return "/";
  75. while (!symbol.empty())
  76. {
  77. tmpResult.insert(tmpResult.begin(), symbol.top());
  78. symbol.pop();
  79. }
  80. string result(tmpResult.begin(), tmpResult.end());
  81. remove(result);
  82. return result;
  83. }
  84. };

发表评论

表情:
评论列表 (有 0 条评论,274人围观)

还没有评论,来说两句吧...

相关阅读