LeetCode 388. 文件的最长绝对路径
是一个模拟,细节比较多,像树的从左至右的遍历问题,可以通过栈去模拟存储每一个单词长度,栈的大小代表了深度,答案就是最长的长度+路径中间隔的数量
// shiran
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i < n; i++)
#define per(i, n, a) for (int i = n - 1; i >= a; i--)
#define sz(x) (int)size(x)
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define pb push_back
typedef long long ll;
typedef pair<int, int> PII;
class Solution {
public:
int lengthLongestPath(string s) {
stack<int> stk;
int res = 0, sum = 0, n = sz(s);
rep(i, 0, n)
{
int k = 0;
while (i < n && s[i] == '\t')
i++, k++;
while (k < stk.size())
sum -= stk.top(), stk.pop();
int j = i;
while (j < n && s[j] != '\n')
j++;
int len = j - i;
sum += len;
stk.push(len);
if (s.substr(i, len).find('.') != -1)
res = max(res, sum + sz(stk) - 1);
i = j;
}
return res;
}
};