Leetcode 之Simplify Path(36)

主要看//之间的内容:如果是仍是/,或者是.,则忽略;如果是..,则弹出;否则压入堆栈。最后根据堆栈的内容进行输出。

string simplifyPath(string const& path)
      {
          vector<string> dirs;
          for (auto i = path.begin(); i != path.end();)
          {
              i++;
              auto j = find(i, path.end(), '/');
              auto dir = string(i, j);//注意用法

              if (!dir.empty() && dir != ".")//当有连续的///时dir为空
              {
                  if (dir == "..")
                  {
                      if (!dirs.empty())
                          dirs.pop_back();
                  }
                  else
                      dirs.push_back(dir);
              }
              i = j;
          }

          stringstream out;
          if (dirs.empty())
          {
              out << "/";
          }
          else
          {
              for (auto dir : dirs)
              {
                  out << '/' << dir;
              }
          }

          return out.str();
      }
View Code

 

posted @ 2016-05-26 09:09  牧马人夏峥  阅读(160)  评论(0编辑  收藏  举报