# 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#includeusing 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 approachclass 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 stringdef 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-periodicdef 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 codeif __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 approachusing 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-periodicfunction 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