<p>You are given a string <code>text</code>. You should split it to k substrings <code>(subtext<sub>1</sub>, subtext<sub>2</sub>, ..., subtext<sub>k</sub>)</code> such that:</p>

<ul>
	<li><code>subtext<sub>i</sub></code> is a <strong>non-empty</strong> string.</li>
	<li>The concatenation of all the substrings is equal to <code>text</code> (i.e., <code>subtext<sub>1</sub> + subtext<sub>2</sub> + ... + subtext<sub>k</sub> == text</code>).</li>
	<li><code>subtext<sub>i</sub> == subtext<sub>k - i + 1</sub></code> for all valid values of <code>i</code> (i.e., <code>1 &lt;= i &lt;= k</code>).</li>
</ul>

<p>Return the largest possible value of <code>k</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;ghiabcdefhelloadamhelloabcdefghi&quot;
<strong>Output:</strong> 7
<strong>Explanation:</strong> We can split the string on &quot;(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)&quot;.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;merchant&quot;
<strong>Output:</strong> 1
<strong>Explanation:</strong> We can split the string on &quot;(merchant)&quot;.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;antaprezatepzapreanta&quot;
<strong>Output:</strong> 11
<strong>Explanation:</strong> We can split the string on &quot;(a)(nt)(a)(pre)(za)(tep)(za)(pre)(a)(nt)(a)&quot;.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= text.length &lt;= 1000</code></li>
	<li><code>text</code> consists only of lowercase English characters.</li>
</ul>

class Solution {
public:
    // ac ac slfsldfslf ac ac
    // acacbac    acbacac
    // for string s beginning with 0 calculate the lcs 
    // remove the first and last (lcs.back()) values
    // doesn't always give the largest k

    // for each index precal index, len; => counter s.size()-index-len , s.size()-index
    // for each i .. s.size()
    //    for each len = 1 .. i + len < s.size():
    //          if(substrings[i])
    //              substring[i+len] = substrings[i]
    int longestDecomposition(string s) {
        vector<vector<int>> isPalindrome(s.size(),vector<int>(s.size()));
        int ans = 0;
        for(int i=0;i<s.size();i++){
            string s1,s2;
            for(int len = 1; i+len <= s.size();len++){
                s1 += s[i+len-1];
                s2 = s[s.size()-i-len] + s2;
                cout<<s1<<' '<<s2<<endl;
                if(s1==s2){
                    isPalindrome[i][len-1] = 1;
                    i=i+len-1;
                    ans++;
                    break;
                }
            }
        }
        return ans;
    }
};
38488