December 17, 2024
이 문제는 문자열 s
와 정수 repeatLimit
가 주어지면, s
의 문자를 repeatLimit
만큼 반복하여 만들 수 있는 가장 긴 lexicographic 문자열을 만드는 문제이다.
크게는 다음 흐름을 따라갔습니다.
from collections import Counter
class Solution:
def repeatLimitedString(self, s: str, repeatLimit: int) -> str:
pq = [(-ord(char), cnt) for char,cnt in Counter(s).items()]
heapify(pq)
print(pq)
result = []
while pq:
char, cnt = heappop(pq)
if result and result[-1] == char:
if not pq: break
next_char,next_cnt = heappop(pq)
result.append(next_char)
if next_cnt-1: heappush(pq, (next_char, next_cnt-1))
heappush(pq, (char, cnt))
else:
m = min(cnt, repeatLimit)
result.extend([char] * m)
if cnt-m: heappush(pq, (char, cnt-m))
return ''.join(chr(-x) for x in result)
Constraints:
1 <= repeatLimit <= s.length <= 10^5
s consists of lowercase English letters.