class
Solution:
def
generatePalindrome(
self
, string):
n
=
len
(string)
pal
=
[[
False
]
*
n
for
_
in
range
(n)]
for
i
in
range
(n):
pal[i][i]
=
True
for
length
in
range
(
2
, n
+
1
):
for
i
in
range
(n
-
length
+
1
):
j
=
i
+
length
-
1
if
string[i]
=
=
string[j]
and
(length
=
=
2
or
pal[i
+
1
][j
-
1
]):
pal[i][j]
=
True
return
pal
def
palindromicPartition(
self
, string):
if
not
string:
return
0
n
=
len
(string)
pal
=
[[
False
]
*
n
for
_
in
range
(n)]
pal
=
self
.generatePalindrome(string)
minCutDp
=
[
float
(
'inf'
)]
*
n
minCutDp[
0
]
=
0
for
i
in
range
(
1
, n):
if
pal[
0
][i]:
minCutDp[i]
=
0
else
:
for
j
in
range
(i,
0
,
-
1
):
if
pal[j][i]:
if
minCutDp[j
-
1
]
+
1
< minCutDp[i]:
minCutDp[i]
=
minCutDp[j
-
1
]
+
1
return
minCutDp[n
-
1
]