📌  相关文章
📜  检查字符串是否由 K 个交替字符

📅  最后修改于: 2021-09-03 13:42:28             🧑  作者: Mango

给定一个字符串str和一个整数K ,任务是检查它是否由K 个交替字符。
例子:

处理方法:要使字符串由 K 个交替字符,必须满足以下条件:

  1. (i + mK) 个索引处的所有字符必须相同,其中i是当前索引, mK表示K 的第 m。这意味着在每 K 个索引之后,字符必须重复。
  2. 相邻的字符不能相同。这是因为如果字符串是“AAAAA”类型,其中单个字符重复任意次数,则上述条件将匹配,但在这种情况下答案必须为“否”。
    下面的代码是上述方法的实现:
C++
// C++ implementation of the approach
 
#include 
using namespace std;
 
// Function to check if a string
// is made up of k alternating characters
bool isKAlternating(string s, int k)
{
    if (s.length() < k)
        return false;
 
    int checker = 0;
 
    // Check if all the characters at
    // indices 0 to K-1 are different
    for (int i = 0; i < k; i++) {
 
        int bitAtIndex = s[i] - 'a';
 
        // If that bit is already set in
        // checker, return false
        if ((checker & (1 << bitAtIndex)) > 0) {
            return false;
        }
 
        // Otherwise update and continue by
        // setting that bit in the checker
        checker = checker | (1 << bitAtIndex);
    }
 
    for (int i = k; i < s.length(); i++)
        if (s[i - k] != s[i])
            return false;
 
    return true;
}
 
// Driver code
int main()
{
    string str = "acdeac";
    int K = 4;
 
    if (isKAlternating(str, K))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
 
    return 0;
}


Java
// Java implementation of the approach
class GFG{
  
// Function to check if a String
// is made up of k alternating characters
static boolean isKAlternating(String s, int k)
{
    if (s.length() < k)
        return false;
  
    int checker = 0;
  
    // Check if all the characters at
    // indices 0 to K-1 are different
    for (int i = 0; i < k; i++) {
  
        int bitAtIndex = s.charAt(i) - 'a';
  
        // If that bit is already set in
        // checker, return false
        if ((checker & (1 << bitAtIndex)) > 0) {
            return false;
        }
  
        // Otherwise update and continue by
        // setting that bit in the checker
        checker = checker | (1 << bitAtIndex);
    }
  
    for (int i = k; i < s.length(); i++)
        if (s.charAt(i - k) != s.charAt(i) )
            return false;
  
    return true;
}
  
// Driver code
public static void main(String[] args)
{
    String str = "acdeac";
    int K = 4;
  
    if (isKAlternating(str, K))
        System.out.print("Yes" +"\n");
    else
        System.out.print("No" +"\n");
}
}
 
// This code is contributed by sapnasingh4991


Python3
# Python 3 implementation of the approach
  
# Function to check if a string
# is made up of k alternating characters
def isKAlternating( s, k):
    if (len(s) < k):
        return False
  
    checker = 0
  
    # Check if all the characters at
    # indices 0 to K-1 are different
    for i in range( k):
  
        bitAtIndex = ord(s[i]) - ord('a')
  
        # If that bit is already set in
        # checker, return false
        if ((checker & (1 << bitAtIndex)) > 0):
            return False
  
        # Otherwise update and continue by
        # setting that bit in the checker
        checker = checker | (1 << bitAtIndex)
  
    for i in range(k,len(s)):
        if (s[i - k] != s[i]):
            return False
  
    return True
  
# Driver code
if __name__ =="__main__":
 
    st = "acdeac"
    K = 4
  
    if (isKAlternating(st, K)):
        print ("Yes")
    else:
        print ("No")
  
# This code is contributed by chitranayal


C#
// C# implementation of the approach
using System;
 
class GFG{
 
// Function to check if a String
// is made up of k alternating characters
static bool isKAlternating(String s, int k)
{
    if (s.Length < k)
        return false;
 
    int checker = 0;
 
    // Check if all the characters at
    // indices 0 to K-1 are different
    for (int i = 0; i < k; i++) {
 
        int bitAtIndex = s[i] - 'a';
 
        // If that bit is already set in
        // checker, return false
        if ((checker & (1 << bitAtIndex)) > 0) {
            return false;
        }
 
        // Otherwise update and continue by
        // setting that bit in the checker
        checker = checker | (1 << bitAtIndex);
    }
 
    for (int i = k; i < s.Length; i++)
        if (s[i - k] != s[i] )
            return false;
 
    return true;
}
 
// Driver code
public static void Main()
{
    String str = "acdeac";
    int K = 4;
 
    if (isKAlternating(str, K))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This article contributed by AbhiThakur


Javascript


输出:
Yes
  1. 时间复杂度: O(N)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live