/* (C) 2024 YourCompanyName */
package string;

/**
 * Created by gouthamvidyapradhan on 25/03/2017. Given a non-empty string check if it can be
 * constructed by taking a substring of it and appending multiple copies of the substring together.
 * You may assume the given string consists of lowercase English letters only and its length will
 * not exceed 10000.
 *
 * <p>Example 1: Input: "abab"
 *
 * <p>Output: True
 *
 * <p>Explanation: It's the substring "ab" twice. Example 2: Input: "aba"
 *
 * <p>Output: False Example 3: Input: "abcabcabcabc"
 *
 * <p>Output: True
 *
 * <p>Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)
 */
public class RepeatedSubstringPattern {
  /**
   * Main method
   *
   * @param args
   * @throws Exception
   */
  public static void main(String[] args) throws Exception {
    System.out.println(new RepeatedSubstringPattern().repeatedSubstringPattern("a"));
  }

  public boolean repeatedSubstringPattern(String s) {
    boolean found;
    for (int i = 1, l = s.length(); i < l; i++) {
      found = true;
      String subI = s.substring(0, i);
      int j = i;
      if (j >= l) return false;
      while (j < l) {
        if ((j + i) >= l + 1) return false;
        String subJ = s.substring(j, j + i);
        if (!subI.equals(subJ)) {
          found = false;
          break;
        }
        j += i;
      }
      if (found) return true;
    }
    return false;
  }
}