Q2 em làm dù là O(n) nhưng dài vl, bác nào có cách elegant hơn ko
Python:
class Solution:
def numOfSubsequences(self, s: str) -> int:
# Case add L
L = [1]
LC = [0]
l = 1
c = 0
t = 0
res1 = 0
for char in s:
if char == "L":
l += 1
elif char == "C":
c += L[-1]
elif char == "T":
res1 += LC[-1]
L.append(l)
LC.append(c)
# Case add T
L = [0]
LC = [0]
l = 0
c = 0
t = 0
res2 = 0
for char in s:
if char == "L":
l += 1
elif char == "C":
c += L[-1]
elif char == "T":
res2 += LC[-1]
L.append(l)
LC.append(c)
res2 += LC[-1]
# Case add C
prefix_L = [0]
for char in s:
if char == "L":
val = prefix_L[-1] + 1
else:
val = prefix_L[-1]
prefix_L.append(val)
postfix_T = [0]
for char in s[::-1]:
val = postfix_T[-1]
if char == "T":
val += 1
postfix_T.append(val)
postfix_T = postfix_T[::-1]
L = [0]
LC = [0]
l = 0
c = 0
t = 0
res3 = 0
plus = 0
for i, char in enumerate(s):
if char == "L":
l += 1
elif char == "C":
c += L[-1]
elif char == "T":
res3 += LC[-1]
L.append(l)
LC.append(c)
plus = max(plus, prefix_L[i + 1] * postfix_T[i + 1])
return max([res1, res2, res3 + plus])




