Check if the given string is K-periodic - GeeksforGeeks

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++
Java
Python3
C#
PHP
Javascript
// CPP implementation of the approach#include<bits/stdc++.h>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 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 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# 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// PHP implementation of the approach // Function that return true if sub-// of length $k starting at index $i// is also a prefix of the stringfunction isPrefix($str, $len, $i, $k){         // $k length sub- cannot start at index $i    if ($i + $k > $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?>
<script>  // js implementation of the approach  // Function that return true if sub-string// of length k starting at index i is also// a prefix of the stringfunction isPrefix(str, len, i, k){    // k length sub-string cannot start at index i    if (i + k > len)        return false;    for (let 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-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 string    for (let i = k; i < len; i += k)        if (!isPrefix(str, len, i, k))            return false;    return true;} // Driver code let str = "geeksgeeks";let len = str.length;let k = 5; if (isKPeriodic(str, len, k))    document.write("Yes");else    document.write("No");   </script>
Yes
 
Time Complexity: O(K * log(len))Auxiliary Space: O(1)
rituraj_jain
princiraj1992
SURENDRA_GANGWAR
ihritik
mohit kumar 29
pankajsharmagfg
Constructive Algorithms
Marketing
substring
Algorithms
Strings
Strings
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
SDE SHEET - A Complete Guide for SDE Preparation
DSA Sheet by Love Babbar
How to Start Learning DSA?
Introduction to Algorithms
Playfair Cipher with Examples
Write a program to reverse an array or string
Reverse a string in Java
Write a program to print all permutations of a given string
C++ Data Types
Longest Common Subsequence | DP-4