Return the largest possible k
such that there exists a_1, a_2, ..., a_k
such that:
- Each
a_i
is a non-empty string; - Their concatenation
a_1 + a_2 + ... + a_k
is equal totext
; - For all
1 <= i <= k
,a_i = a_{k+1 - i}
.
Example 1:
Input: text = "ghiabcdefhelloadamhelloabcdefghi" Output: 7 Explanation: We can split the string on "(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)".
Example 2:
Input: text = "merchant" Output: 1 Explanation: We can split the string on "(merchant)".
Example 3:
Input: text = "antaprezatepzapreanta" Output: 11 Explanation: We can split the string on "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)".
Example 4:
Input: text = "aaa" Output: 3 Explanation: We can split the string on "(a)(a)(a)".
Constraints:
text
consists only of lowercase English characters.1 <= text.length <= 1000
思路:递归+memo,以为要改些成dp形式,没想到A了
class Solution(object):
def longestDecomposition(self, text):
"""
:type text: str
:rtype: int
"""
memo={}
def helper(s):
n=len(s)
if n<=1: return n
if s in memo: return memo[s]
res=1
for i in range(n//2):
if s[:i+1]==s[-i-1:]:
res=max(res,2+helper(s[i+1:len(s)-i-1]))
memo[s]=res
return res
res=helper(text)
return res
s=Solution()
print(s.longestDecomposition('ghiabcdefhelloadamhelloabcdefghi'))
print(s.longestDecomposition('merchant'))
print(s.longestDecomposition('antaprezatepzapreanta'))