初级农民-请到新手上路获取积分
- 积分
- 7
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-9-7
- 最后登录
- 1970-1-1
|
写一个LC388的, 这现场真是很难写对- class Solution {
- public:
- int lengthLongestPath(string input) {
- size_t i = 0;
- int max_len = 0;
- int cur_len = 0;
- vector<int> levels;
- bool is_file = false;
- size_t indent = 0;
- while (i < input.size()) {
- if (input[i] == '\n') {
- i++; //skip '\n'
- int len = cur_len + 1;
- if (indent > 0)
- len += levels[indent-1];
- if (indent == levels.size())
- levels.push_back(len);
- else
- levels[indent] = len;
- if (is_file && len > max_len)
- max_len = len;
- cur_len = 0;
- is_file = false;
- indent = 0;
- while (i < input.size() && input[i] == '\t') {
- indent++;
- i++; //skip '\t'
- }
- } else {
- cur_len++;
- if (input[i] == '.')
- is_file = true;
- i++;
- }
- }
- if (is_file) {
- int len = levels[indent - 1] + cur_len;
- max_len = max(len, max_len);
- }
- return max_len;
- }
- };
- int main()
- {
- Solution s;
- string input = "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext";
- cout << s.lengthLongestPath(input) << endl;
- return 0;
- }
复制代码 |
|