# Check if the given string is K-periodic

• Difficulty Level : Easy
• Last Updated : 02 Aug, 2021

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