<p>Given a string <code>s</code>, check if it can be constructed by taking a substring of it and appending multiple copies of the substring together.</p>

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

<pre>
<strong>Input:</strong> s = &quot;abab&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> It is the substring &quot;ab&quot; twice.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;aba&quot;
<strong>Output:</strong> false
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;abcabcabcabc&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> It is the substring &quot;abc&quot; four times or the substring &quot;abcabc&quot; twice.
</pre>

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

<ul>
	<li><code>1 &lt;= s.length &lt;= 10<sup>4</sup></code></li>
	<li><code>s</code> consists of lowercase English letters.</li>
</ul>

class Solution:
    def getnext(self, nxt,text:str):
        j = 0
        nxt[0]=0
        for i in range(1, len(text)):
            while j > 0 and text[j] != text[i]:
                j = nxt[j-1]
            if text[j] == text[i]:
                j += 1
            nxt[i] = j
        return nxt
    def repeatedSubstringPattern(self, s: str) -> bool:
        if len(s) == 0 :
            return False
        nxt = [0] * len(s)
        nxt = self.getnext(nxt,s)

        if nxt[len(s)-1] == 0 :
            return False
        if len(s) % (len(s) - nxt[len(s) - 1]) == 0:
            return True
        else: return False
    

        
16900