class Solution:
def bestClosingTime(self, customers: str) -> int:
n = len(customers)
res = n
minPenalty = n
for i in range(n + 1):
penalty = 0
for j in range(i):
if customers[j] == 'N':
penalty += 1
for j in range(i, n):
if customers[j] == 'Y':
penalty += 1
if penalty < minPenalty:
minPenalty = penalty
res = i
return resclass Solution:
def bestClosingTime(self, customers: str) -> int:
n = len(customers)
cnt = 0
prefixN = []
for c in customers:
prefixN.append(cnt)
if c == 'N':
cnt += 1
prefixN.append(cnt)
suffixY = [0] * (n + 1)
for i in range(n - 1, -1, -1):
suffixY[i] = suffixY[i + 1]
if customers[i] == 'Y':
suffixY[i] += 1
res = n
minPenalty = n
for i in range(n + 1):
penalty = prefixN[i] + suffixY[i]
if penalty < minPenalty:
minPenalty = penalty
res = i
return resclass Solution:
def bestClosingTime(self, customers: str) -> int:
cntY = sum(c == "Y" for c in customers)
minPenalty = cntY
res = cntN = 0
for i, c in enumerate(customers):
if c == "Y":
cntY -= 1
else:
cntN += 1
penalty = cntN + cntY
if penalty < minPenalty:
res = i + 1
minPenalty = penalty
return resclass Solution:
def bestClosingTime(self, customers: str) -> int:
res = minPenalty = 0
penalty = 0
for i, c in enumerate(customers):
penalty += 1 if c == 'Y' else -1
if penalty > minPenalty:
minPenalty = penalty
res = i + 1
return res