classSolution: defuniqueLetterString(self, s: str) -> int: n = len(s) res = 0 m = {} l = [0] * n r = [0] * n for i inrange(n): x = s[i] l[i] = m.get(x, -1) m[x] = i m.clear() for i inrange(n - 1, -1, -1): x = s[i] r[i] = m.get(x, n) m[x] = i
res = sum((i - a) * (b - i) for i, (a, b) inenumerate(zip(l, r))) return res
classSolution: defsumSubarrayMins(self, arr: List[int]) -> int: mod = 10 ** 9 + 7 n = len(arr) left, right = [-1] * n, [n] * n st = [] i = 0 for i, x inenumerate(arr): while st and arr[st[-1]] <= x: right[st.pop()] = i if st: left[i] = st[-1] st.append(x) res = sum(a * (i - l) * (r - i) for i, (l, r) inenumerate(zip(left, right))) return res
classSolution: defminimumFuelCost(self, roads: List[List[int]], seats: int) -> int: g = defaultdict(list) for a, b in roads: g[a].append(b) g[b].append(a)
ans = 0 # 令dfs返回这条路的人数 defdfs(x, fa): # 每条路至少有端点这一个人走 ret = 1 for y in g[x]: if y != fa: nonlocal ans t = dfs(y, x) ans += (t - 1) // seats + 1 # 现在ret 就是这个点到终点的人数 (注意一个点可通向多个点 有多个终点 这些终点是不算在这个ret里的 而是算在fa的ret里) ret += t return ret dfs(0, -1) return ans