Menu
CoddyTech

Palindrome Partitioning

回文は、左から右に読んでも右から左に読んでも同じです。文字列 s を1つ以上の部分に分割し、各部分が回文になるようにして、そのすべての分割方法を返してください。

各分割は、順番に並べた部分を | でつないで表します。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 のほうが先に並びます。2文字目では、もう一方が | なのに対し、こちらは a であり、| はどの文字よりも後に並ぶためです。
challenge icon

発展問題

長さが最大2,000の文字列について、sを回文に分割するための最小の切断回数を求められますか?

コードをリセット
def partition(s):
    # ここにコードを書いてください

テスト #1

テスト #2

引数

s = "aab"

期待される出力

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