GFG App
Open App
Browser
Continue

# Check if the given string is K-periodic

Given a string str and an integer K, the task is to check whether the given string is K-periodic. A string is k-periodic if the string is a repetition of the sub-string str[0 … k-1] i.e. the string “ababab” is 2-periodic. Print Yes if the given string is k-periodic, else print No.

Examples:

Input: str = “geeksgeeks”, k = 5
Output: Yes
Given string can be generated by repeating the prefix of length k i.e. “geeks”

Input: str = “geeksforgeeks”, k = 3
Output: No

Approach: Starting with the sub-string str[k, 2k-1], str[2k, 3k-1] and so on, check whether all of these sub-strings are equal to the prefix of the string of length k i.e. str[0, k-1]. If the condition is true for all such sub-strings, then print Yes else print No.
Below is the implementation of the above approach:

## C++

 `// CPP implementation of the approach` `#include` `using` `namespace` `std;`   `    ``// Function that return true if sub-string ` `    ``// of length k starting at index i is also ` `    ``// a prefix of the string` `    ``bool` `isPrefix(string str, ``int` `len, ``int` `i, ``int` `k)` `    ``{` `        ``// k length sub-string cannot start at index i` `        ``if` `(i + k > len)` `            ``return` `false``;` `        ``for` `(``int` `j = 0; j < k; j++) ` `        ``{`   `            ``// Character mismatch between the prefix` `            ``// and the sub-string starting at index i` `            ``if` `(str[i] != str[j])` `                ``return` `false``;` `            ``i++;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// Function that returns true if str is K-periodic` `    ``bool` `isKPeriodic(string str, ``int` `len, ``int` `k)` `    ``{` `        ``// Check whether all the sub-strings` `        ``// str[0, k-1], str[k, 2k-1] ... are equal` `        ``// to the k length prefix of the string` `        ``for` `(``int` `i = k; i < len; i += k)` `            ``if` `(!isPrefix(str, len, i, k))` `                ``return` `false``;` `        ``return` `true``;` `    ``}`   `    ``// Driver code` `    ``int` `main()` `    ``{` `        ``string str = ``"geeksgeeks"``;` `        ``int` `len = str.length();` `        ``int` `k = 5;`   `        ``if` `(isKPeriodic(str, len, k))` `        ``cout << (``"Yes"``);` `        ``else` `        ``cout << (``"No"``);` `    ``}`   `// This code is contributed by` `// Surendra_Gangwar`

## Java

 `// Java implementation of the approach` `class` `GFG {`   `    ``// Function that return true if sub-string ` `    ``// of length k starting at index i is also ` `    ``// a prefix of the string` `    ``static` `boolean` `isPrefix(String str, ``int` `len, ``int` `i, ``int` `k)` `    ``{` `        ``// k length sub-string cannot start at index i` `        ``if` `(i + k > len)` `            ``return` `false``;` `        ``for` `(``int` `j = ``0``; j < k; j++) {`   `            ``// Character mismatch between the prefix` `            ``// and the sub-string starting at index i` `            ``if` `(str.charAt(i) != str.charAt(j))` `                ``return` `false``;` `            ``i++;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// Function that returns true if str is K-periodic` `    ``static` `boolean` `isKPeriodic(String str, ``int` `len, ``int` `k)` `    ``{` `        ``// Check whether all the sub-strings` `        ``// str[0, k-1], str[k, 2k-1] ... are equal` `        ``// to the k length prefix of the string` `        ``for` `(``int` `i = k; i < len; i += k)` `            ``if` `(!isPrefix(str, len, i, k))` `                ``return` `false``;` `        ``return` `true``;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``String str = ``"geeksgeeks"``;` `        ``int` `len = str.length();` `        ``int` `k = ``5``;`   `        ``if` `(isKPeriodic(str, len, k))` `            ``System.out.print(``"Yes"``);` `        ``else` `            ``System.out.print(``"No"``);` `    ``}` `}`

## Python3

 `# Python3 implementation of the approach `   `# Function that returns true if sub-string ` `# of length k starting at index i ` `# is also a prefix of the string ` `def` `isPrefix(string, length, i, k): ` `    `  `    ``# k length sub-string cannot ` `    ``# start at index i ` `    ``if` `i ``+` `k > length: ` `        ``return` `False` `    `  `    ``for` `j ``in` `range``(``0``, k): `   `        ``# Character mismatch between the prefix ` `        ``# and the sub-string starting at index i ` `        ``if` `string[i] !``=` `string[j]: ` `            ``return` `False` `        ``i ``+``=` `1` `        `  `    ``return` `True`   `# Function that returns true if ` `# str is K-periodic ` `def` `isKPeriodic(string, length, k): ` `    `  `    ``# Check whether all the sub-strings ` `    ``# str[0, k-1], str[k, 2k-1] ... are equal ` `    ``# to the k length prefix of the string ` `    ``for` `i ``in` `range``(k, length, k): ` `        ``if` `isPrefix(string, length, i, k) ``=``=` `False``: ` `            ``return` `False` `    ``return` `True` `    `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``:` `    `  `    ``string ``=` `"geeksgeeks"` `    ``length ``=` `len``(string) ` `    ``k ``=` `5`   `    ``if` `isKPeriodic(string, length, k) ``=``=` `True``: ` `        ``print``(``"Yes"``) ` `    ``else``:` `        ``print``(``"No"``) ` `    `  `# This code is contributed ` `# by Rituraj Jain`

## C#

 `// C# implementation of the approach` `using` `System;` `    `  `class` `GFG ` `{`   `    ``// Function that return true if sub-string ` `    ``// of length k starting at index i is also ` `    ``// a prefix of the string` `    ``static` `bool` `isPrefix(String str, ``int` `len, ``int` `i, ``int` `k)` `    ``{` `        ``// k length sub-string cannot start at index i` `        ``if` `(i + k > len)` `            ``return` `false``;` `        ``for` `(``int` `j = 0; j < k; j++)` `        ``{`   `            ``// Character mismatch between the prefix` `            ``// and the sub-string starting at index i` `            ``if` `(str[i] != str[j])` `                ``return` `false``;` `            ``i++;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// Function that returns true if str is K-periodic` `    ``static` `bool` `isKPeriodic(String str, ``int` `len, ``int` `k)` `    ``{` `        ``// Check whether all the sub-strings` `        ``// str[0, k-1], str[k, 2k-1] ... are equal` `        ``// to the k length prefix of the string` `        ``for` `(``int` `i = k; i < len; i += k)` `            ``if` `(!isPrefix(str, len, i, k))` `                ``return` `false``;` `        ``return` `true``;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``String str = ``"geeksgeeks"``;` `        ``int` `len = str.Length;` `        ``int` `k = 5;`   `        ``if` `(isKPeriodic(str, len, k))` `            ``Console.Write(``"Yes"``);` `        ``else` `            ``Console.Write(``"No"``);` `    ``}` `}`   `/* This code contributed by PrinciRaj1992 */`

## PHP

 ` ``\$len``)` `        ``return` `false;` `    ``for` `( ``\$j` `= 0; ``\$j` `< ``\$k``; ``\$j``++) ` `    ``{`   `        ``// Character mismatch between the prefix` `        ``// and the sub- starting at index \$i` `        ``if` `(``\$str``[``\$i``] != ``\$str``[``\$j``])` `            ``return` `false;` `        ``\$i``++;` `    ``}` `    ``return` `true;` `}`   `// Function that returns true if \$str is K-periodic` `function` `isKPeriodic(``\$str``, ``\$len``, ``\$k``)` `{` `    ``// Check whether all the sub-strings` `    ``// \$str[0, \$k-1], \$str[\$k, 2k-1] ... are equal` `    ``// to the \$k length prefix of the ` `    ``for` `(``\$i` `= ``\$k``; ``\$i` `< ``\$len``; ``\$i` `+= ``\$k``)` `        ``if` `(!isPrefix(``\$str``, ``\$len``, ``\$i``, ``\$k``))` `            ``return` `false;` `    ``return` `true;` `}`   `// Driver code` `\$str` `= ``"geeksgeeks"``;` `\$len` `= ``strlen``(``\$str``);` `\$k` `= 5;`   `if` `(isKPeriodic(``\$str``, ``\$len``, ``\$k``))` `    ``echo` `(``"Yes"``);` `else` `    ``echo` `(``"No"``);`   `// This code is contributed by ihritik` `?>`

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(K * log(len))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up