📌  相关文章
📜  检查给定的字符串是否为K周期

📅  最后修改于: 2021-04-27 22:13:06             🧑  作者: Mango

给定一个字符串str和一个整数K ,任务是检查给定的字符串是否为K周期。如果字符串是子字符串str [0…k-1]的重复,则字符串为k周期,即字符串“ ababab”2周期。如果给定的字符串是k周期,则打印Yes ,否则打印No。

例子:

方法:从子字符串str [k,2k-1]str [2k,3k-1]等开始,检查所有这些子字符串是否等于长度为k的字符串的前缀,即str [0,k-1] 。如果所有这些子字符串的条件都为true,则输出Yes,否则输出No。

下面是上述方法的实现:

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


输出:
Yes