LeetCode71——Simplify Path
2015-11-03 09:24
477 查看
LeetCode71——Simplify Path
依然是恶心的字符串处理,倒不是有多难,是你不知道他有哪些Sample Input,你得把所有的情况考虑进去。。。
我在做的时候就没有考虑非法输入,也就是说,我默认认为给定的输入都是合法的路径名。。。
但是题目会给出/home///near/ 这种非法路径输入,或者是 /home/zhangxiao/.../ 这种,非常恶心。。。
好了,这个题目没啥好说的,维护一个栈,要化简的话,考虑当前目录(一个.)和上级目录(两个.)非法目录 (多个.)
然后斜杠‘/’的情况判断栈顶元素再考虑是否忽略。。。
这题改得一塌糊涂,好在最后通过了
代码:
依然是恶心的字符串处理,倒不是有多难,是你不知道他有哪些Sample Input,你得把所有的情况考虑进去。。。
我在做的时候就没有考虑非法输入,也就是说,我默认认为给定的输入都是合法的路径名。。。
但是题目会给出/home///near/ 这种非法路径输入,或者是 /home/zhangxiao/.../ 这种,非常恶心。。。
好了,这个题目没啥好说的,维护一个栈,要化简的话,考虑当前目录(一个.)和上级目录(两个.)非法目录 (多个.)
然后斜杠‘/’的情况判断栈顶元素再考虑是否忽略。。。
这题改得一塌糊涂,好在最后通过了
代码:
class Solution { private: void remove(string & path) { int i = path.size() - 1; while (i > 0 && path[i] == '/') { path.pop_back(); i--; } } public: string simplifyPath(string path) { remove(path); vector<char>tmpResult; stack<char>symbol; int dotCount = 0; for (int i = 0; i < path.size(); i++) { if (path[i] == '/') { if (!symbol.empty() && symbol.top() == '/') continue; symbol.push(path[i]); } else if (path[i] == '.') { if (path[i + 1] == '.') { dotCount = 0; int j = i; while (j < path.size() && path[j] == '.') { dotCount++; j++; } if (dotCount == 2) { if (path[j] == '/'||j==path.size()) { symbol.pop();//去掉'/' while (!symbol.empty() && symbol.top() != '/') symbol.pop(); if (!symbol.empty()) symbol.pop(); i = i + 1; } else { symbol.push('.'); } } else { i += dotCount - 1; while (dotCount--) { symbol.push('.'); } } } else if (isalpha(path[i + 1])) { symbol.push(path[i]); continue; } } else { symbol.push(path[i]); } } if (symbol.empty()) return "/"; while (!symbol.empty()) { tmpResult.insert(tmpResult.begin(), symbol.top()); symbol.pop(); } string result(tmpResult.begin(), tmpResult.end()); remove(result); return result; } };
相关文章推荐
- 转!面向对象设计原则
- filestream文件流
- C++默认参数在声明还是定义确定?
- AndroidL 音频文件编译过程
- OpenEmbedded 入门 (一):OpenEmbedded 简介
- Java 并发包中的读写锁及其实现分析
- const char*, char const*, char*const的区别
- 遗传算法的matlab实现
- 【内核】进程切换 switch_to 与 __switch_to
- Spark 中的RDD是个什么鬼,我们为什么需要它?
- 在线问答网站结构定义和信息处理系统---技术规格说明书
- 简直喝血!H.265要被专利费活活玩死
- Unity3d 4.6.8 ShareSDK 分享新浪,微信,qq,经验总结
- sizeof 数组名 和 sizeof 指针
- 机器学习:用初等数学解读逻辑回归
- iOS 开发传值 代理传值
- C# API 大全(一)
- Linux档案权限学习笔记
- Oracle EBS Patch Demo
- 练习!!100以内的质数