# 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. 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ` `?> `

Output:

```Yes
```

My Personal Notes arrow_drop_up

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.