0459-repeated-substring-pattern

Try it on leetcode

Description

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

 

Example 1:

Input: s = "abab"
Output: true
Explanation: It is the substring "ab" twice.

Example 2:

Input: s = "aba"
Output: false

Example 3:

Input: s = "abcabcabcabc"
Output: true
Explanation: It is the substring "abc" four times or the substring "abcabc" twice.

 

Constraints:

  • 1 <= s.length <= 104
  • s consists of lowercase English letters.

Solution(Python)

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        def computelps(s):
            n = len(s)
            lps = [0] *n
            i = 1
            len_ = 0
            while i<n:
                if s[i] == s[len_]:
                    len_+=1
                    lps[i] = len_
                    i+=1
                else:
                    if len_ != 0:
                        len_ = lps[len_ - 1]
                    else:
                        lps[i] = 0
                        i+=1
            return lps
        lps = computelps(s)
        n = len(s)
        len_ = lps[n-1]
        if len_>0 and n % (n-len_) == 0 :
            return True
        else:
            return False