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
解题思路:
class Solution {
public:
int longestDecomposition(string text)
{
return DFS(text , 0 , text.size()) ;
}
int DFS(string text , int l , int r)
{
if(l >= r) return 0 ;
int res = 1 ;
for(int len = 1 ; len <= (r - l) / 2 ; ++len)
{
if(text.substr(l , len) == text.substr(r - len , len))
{
res = 2 + DFS(text , l + len , r - len) ;
return res ;
}
}
return res ;
}
};