Open In App

Count occurrences of a character in a repeated string

Improve
Improve
Like Article
Like
Save
Share
Report

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:

C++




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




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




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




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


Javascript




<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
// 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.

  • Define a function count_occurrences_brute that takes three parameters: N, s, and c. N is an integer representing the number of characters to consider, s is a string representing the repeated string, and c is a character for which we want to count the occurrences.
  • Generate the infinitely repeated string by repeating s enough times to cover at least N characters, and then truncating the result to exactly N characters.
  • Initialize a counter variable count to 0.
  • Loop over the first N characters of the repeated string, and increment count each time the current character is equal to c.
  • Return the value of count.

C++




//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;
}


Java




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


Python3




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


C#




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


Javascript




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)



Last Updated : 12 Nov, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads