Menu
CoddyTech

Palindrome Partitioning

회문은 왼쪽에서 오른쪽으로 읽어도, 오른쪽에서 왼쪽으로 읽어도 똑같이 읽힙니다. 문자열 s를 하나 이상의 조각으로 나누어 모든 조각이 회문이 되도록 하고, 가능한 모든 방법을 반환하세요.

각 분할은 조각을 순서대로 |로 이어서 나타내세요. 예를 들어 aab를 a, a, b로 나누면 a|a|b가 됩니다. 문자 코드를 비교해 오름차순으로 정렬한 분할을 반환하세요. 따라서 |는 모든 소문자 뒤에 옵니다.

함수

partition(s: string) → string-array
sstring
잘라낼 소문자 문자열
반환값string-array
s를 회문으로 나눈 모든 경우를 조각 사이에 |를 넣어 오름차순으로

제약 조건

  • 1 ≤ s.length ≤ 11
  • s에는 소문자 영어 문자만 포함되어 있습니다.
  • 같은 글자 11개로 이루어진 문자열은 1,024가지로 분할할 수 있어 답이 가장 큽니다.

예제

입력
s = "aab"
출력
["aa|b", "a|a|b"]
설명
aa|b와 a|a|b만 모든 조각이 회문입니다. a|ab는 ab에서 조건을 만족하지 못합니다. aa|b가 사전순으로 먼저 옵니다. 두 번째 문자에서 한쪽은 a이고 다른 쪽은 모든 문자보다 뒤에 오는 |이기 때문입니다.
challenge icon

후속 질문

길이가 최대 2,000인 문자열에 대해 s를 회문으로 나누는 최소 자르기 횟수를 찾을 수 있나요?

코드 초기화
def partition(s):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

인자

s = "aab"

예상 출력

["aa|b", "a|a|b"]