Open In App

Count occurrences of a character in a repeated string

Given an integer N and a lowercase string. The string is repeated infinitely. The task is to find the No. of occurrences of a given character x in first N letters.
Examples: 

Input : N = 10 str = “abcac”
Output : 4
Explanation: “abcacabcac” is the substring from the infinitely repeated string. In first 10 letters ‘a’ occurs 4  times.



Input: N = 10, str = “aba”
Output : 7

Approach: 
1. Find the occurrences of character ‘a’ in the given string. 
2. Find the No. of repetitions which are required to find the ‘a’ occurrences. 
3. Multiply the single string occurrences to the No. of repetitions. 
4. If given n is not the multiple of given string size then we will find the ‘a’ occurrences in the remaining substring.



Below is the implementation of above approach:




// CPP program to find the occurrences of
// character x in the infinite repeated string
// upto length n
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the character 'a'
int countChar(string str, char x)
{
    int count = 0, n = 10;
    for (int i = 0; i < str.size(); i++)
        if (str[i] == x)
            count++;
 
    // atleast k repetition are required
    int repetitions = n / str.size();
    count = count * repetitions;
 
    // if n is not the multiple of the string size
    // check for the remaining repeating character.
    for (int i = 0; i < n % str.size(); i++) {
        if (str[i] == x)
            count++;
    }
 
    return count;
}
 
// Driver code
int main()
{
    string str = "abcac";
    cout << countChar(str, 'a');
    return 0;
}
 
// This code is contributed by Surendra_Gangwar




// Java program to find the occurrences
// of character x in the infinite
// repeated string upto length n
import java.util.*;
import java.lang.*;
 
class GFG
{
// Function to count the character 'a'
static int countChar(String str, char x)
{
    int count = 0;
    int n = 10;
    for (int i = 0; i < str.length(); i++)
        if (str.charAt(i) == x)
            count++;
 
    // atleast k repetition are required
    int repetitions = n / str.length();
    count = count * repetitions;
 
    // if n is not the multiple of the
    // string size check for the remaining
    // repeating character.
    for (int i = 0;
            i < n % str.length(); i++)
    {
        if (str.charAt(i) == x)
            count++;
    }
 
    return count;
}
 
// Driver code
public static void main(String args[])
{
    String str = "abcac";
    System.out.println(countChar(str, 'a'));
}
}
 
// This code is contributed
// by Akanksha Rai




# Python3 program to find the occurrences of
# character x in the infinite repeated string
# upto length n
 
# Function to count the character 'a'
def countChar(str, x):
    count = 0
    for i in range(len(str)):
        if (str[i] == x) :
            count += 1
    n = 10
     
    # atleast k repetition are required
    repetitions = n // len(str)
    count = count * repetitions
 
    # if n is not the multiple of the
    # string size check for the remaining
    # repeating character.
    l = n % len(str)
    for i in range(l):
        if (str[i] == x):
            count += 1
    return count
 
# Driver code
str = "abcac"
print(countChar(str, 'a'))
 
# This code is contributed
# by sahishelangia




// C# program to find the occurrences
// of character x in the infinite
// repeated string upto length n
using System;
 
class GFG
{
// Function to count the character 'a'
static int countChar(string str, char x)
{
    int count = 0;
    int n = 10;
    for (int i = 0; i < str.Length; i++)
        if (str[i] == x)
            count++;
 
    // atleast k repetition are required
    int repetitions = n / str.Length;
    count = count * repetitions;
 
    // if n is not the multiple of the
    // string size check for the remaining
    // repeating character.
    for (int i = 0;
             i < n % str.Length; i++)
    {
        if (str[i] == x)
            count++;
    }
 
    return count;
}
 
// Driver code
public static void Main()
{
    string str = "abcac";
    Console.WriteLine(countChar(str, 'a'));
}
}
 
// This code is contributed
// by Akanksha Rai




<script>
 
    // JavaScript program to find the occurrences
    // of character x in the infinite
    // repeated string upto length n
     
    // Function to count the character 'a'
    function countChar(str, x)
    {
        let count = 0;
        let n = 10;
        for (let i = 0; i < str.length; i++)
            if (str[i] == x)
                count++;
 
        // atleast k repetition are required
        let repetitions = n / str.length;
        count = count * repetitions;
 
        // if n is not the multiple of the
        // string size check for the remaining
        // repeating character.
        for (let i = 0; i < n % str.length; i++)
        {
            if (str[i] == x)
                count++;
        }
 
        return count;
    }
     
    let str = "abcac";
    document.write(countChar(str, 'a'));
     
</script>




<?php
// PHP program to find the occurrences
// of character x in the infinite
// repeated string upto length n
 
// Function to count the character 'a'
function countChar($str, $x)
{
    $count = 0;
    $n = 10;
    for ($i = 0; $i < strlen($str); $i++)
        if ($str[$i] == $x)
            $count++;
 
    // atleast k repetition are required
    $repetitions = (int)($n / strlen($str));
    $count = $count * $repetitions;
 
    // if n is not the multiple of
    // the string size check for the
    // remaining repeating character.
    for ($i = 0; $i < $n % strlen($str); $i++)
    {
        if ($str[$i] == $x)
            $count++;
    }
 
    return $count;
}
 
// Driver code
$str = "abcac";
echo countChar($str, 'a');
 
// This code is contributed by Sachin
?>

Output
4







Time complexity: O(length(str))
Auxiliary space: O(1) 

 Brute Force:

Approach:

In this approach, we will generate the infinitely repeated string and count the occurrences of the desired character in the first N characters of the string.




//C++ Code for above approach
#include <iostream>
#include <string>
 
int count_occurrences_brute(int N, const std::string &s, char c) {
    // generate the infinitely repeated string
    std::string repeated = "";
    for (int i = 0; i < N; i++) {
        repeated += s[i % s.length()];
    }
     
    // count the occurrences of the desired character
    int count = 0;
    for (int i = 0; i < N; i++) {
        if (repeated[i] == c) {
            count++;
        }
    }
     
    return count;
}
 
int main() {
    // example usage
    std::cout << count_occurrences_brute(10, "abcac", 'a') << std::endl;  // output: 4
    std::cout << count_occurrences_brute(10, "aba", 'a') << std::endl;    // output: 7
 
    return 0;
}




public class Main {
    public static int countOccurrencesBrute(int N, String s,
                                            char c)
    {
        // Generate the infinitely repeated string
        StringBuilder repeated = new StringBuilder();
        for (int i = 0; i < N; i++) {
            repeated.append(s.charAt(i % s.length()));
        }
 
        // Count the occurrences of the desired character
        int count = 0;
        for (int i = 0; i < N; i++) {
            if (repeated.charAt(i) == c) {
                count++;
            }
        }
 
        return count;
    }
 
    public static void main(String[] args)
    {
        // Example usage
        System.out.println(countOccurrencesBrute(
            10, "abcac", 'a')); // Output: 4
        System.out.println(countOccurrencesBrute(
            10, "aba", 'a')); // Output: 7
    }
}




def count_occurrences_brute(N, s, c):
    # generate the infinitely repeated string
    repeated = (s * (N // len(s) + 1))[:N]
    # count the occurrences of the desired character
    count = 0
    for i in range(N):
        if repeated[i] == c:
            count += 1
    return count
 
# example usage
print(count_occurrences_brute(10, 'abcac', 'a'))  # output: 4
print(count_occurrences_brute(10, 'aba', 'a'))    # output: 7




using System;
 
class Program {
    // Function to count occurrences of a character 'c' in a
    // string 's' repeated 'N' times
    static int CountOccurrencesBrute(int N, string s,
                                     char c)
    {
        // Generate the infinitely repeated string
        string repeated = "";
        for (int i = 0; i < N; i++) {
            repeated += s[i % s.Length];
        }
 
        // Count the occurrences of the desired character
        int count = 0;
        for (int i = 0; i < N; i++) {
            if (repeated[i] == c) {
                count++;
            }
        }
 
        return count;
    }
 
    static void Main()
    {
        // Example usage
        Console.WriteLine(CountOccurrencesBrute(
            10, "abcac", 'a')); // Output: 4
        Console.WriteLine(CountOccurrencesBrute(
            10, "aba", 'a')); // Output: 7
    }
}




function countOccurrencesBrute(N, s, c) {
  // generate the infinitely repeated string
  const repeated = (s.repeat(Math.floor(N / s.length) + 1)).slice(0, N);
   
  // count the occurrences of the desired character
  let count = 0;
  for (let i = 0; i < N; i++) {
    if (repeated[i] === c) {
      count++;
    }
  }
  return count;
}
 
// example usage
console.log(countOccurrencesBrute(10, 'abcac', 'a'));
console.log(countOccurrencesBrute(10, 'aba', 'a'));  

Output
4
7








Time Complexity: O(N^2)
Space Complexity: O(N)


Article Tags :