Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41135
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2014-01-26 17:36:12

这题比较elegant的解法是弄个状态机什么的吧  遇到什么字符进什么状态触发什么操作之类的...  懒得弄那么复杂了直接if...else了...



点击(此处)折叠或打开

  1. class Solution {
  2. public:
  3.     string simplifyPath(string path) {
  4.         string re;
  5.         if(path.empty()) return re;
  6.         re.push_back('/');
  7.         for(int i=0;i<path.length();)
  8.         {
  9.             if(i<(int)path.length()-3)
  10.             {
  11.                 if(0==strcmp(path.substr(i,3).c_str(),"/./"))
  12.                     {if(re[re.length()-1]!='/')re.push_back('/');i+=2;continue;}
  13.                 if(0==strcmp(path.substr(i,4).c_str(),"/../"))
  14.                     {if(re.length()>1)do{re.pop_back();}while(re[re.length()-1]!='/');i+=3;continue;}
  15.             }
  16.             else if(i==path.length()-3)
  17.             {
  18.                 if(0==strcmp(path.substr(i,3).c_str(),"/./")) break;
  19.                 if(0==strcmp(path.substr(i,3).c_str(),"/..")) {if(re.length()>1)do{re.pop_back();}while(re[re.length()-1]!='/');break;}
  20.             }
  21.             else if(i==path.length()-2)
  22.             {
  23.                 if(0==strcmp(path.substr(i,2).c_str(),"//")||0==strcmp(path.substr(i,2).c_str(),"/.")) break;
  24.             }
  25.             else if(i==path.length()-1)
  26.             {
  27.                 if('/'==path[i]) break;
  28.             }
  29.             
  30.             if(re[re.length()-1]!='/'||path[i]!='/')re.push_back(path[i]);
  31.             i++;
  32.         }
  33.         if(re.length()>1&&'/'==re[re.length()-1]) re.pop_back();
  34.         return re;
  35.     }
  36. };

阅读(444) | 评论(0) | 转发(0) |
0

上一篇:【LeetCode解答】Minimum Window Substring

下一篇:没有了

给主人留下些什么吧!~~