Open In App

Count substrings that starts with character X and ends with character Y

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a string str of n lowercase characters, the task is to count the number of substrings of str starting with character X and ending with character Y.

Examples: 

Input: str = "abbcaceghcak"
        x = 'a', y = 'c'
Output: 5
abbc, abbcac, ac, abbcaceghc, aceghc

Input: str = "geeksforgeeks"
        x = 'g', y = 'e'
Output: 6

Approach: 

  • Initialize two counters i.e. tot_count to count the total number of substrings and count_x to count the number of strings that start with X.
  • Start traversing the string.
  • If the current character is X then increment the count of count_x.
  • If the current character is Y, it means a string ends at Y so increment the count of tot_count i.e. 
tot_count = tot_count + count_x
  • It means that if there exists a Y then it will make a substring with all the X occurs before Y in the string. So, add the count of X to the total count.
  • Return total count.

Below is the implementation of above approach:

C++




// C++ implementation to count substrings
// starting with character X and ending
// with character Y
#include <bits/stdc++.h>
using namespace std;
 
// function to count substrings starting with
// character X and ending with character Y
int countSubstr(string str, int n,
                char x, char y)
{
    // to store total count of
    // required substrings
    int tot_count = 0;
 
    // to store count of character 'x'
    // up to the point the string 'str'
    // has been traversed so far
    int count_x = 0;
 
    // traverse 'str' from left to right
    for (int i = 0; i < n; i++) {
 
        // if true, increment 'count_x'
        if (str[i] == x)
            count_x++;
 
        // if true accumulate 'count_x'
        // to 'tot_count'
        if (str[i] == y)
            tot_count += count_x;
    }
 
    // required count
    return tot_count;
}
 
// Driver code
int main()
{
    string str = "abbcaceghcak";
    int n = str.size();
    char x = 'a', y = 'c';
 
    cout << "Count = "
         << countSubstr(str, n, x, y);
 
    return 0;
}


Java




// Java implementation to count
// substrings starting with
// character X and ending
// with character Y
import java.util.*;
import java.lang.*;
import java.io.*;
 
class GFG
{
// function to count substrings
// starting with character X and
// ending with character Y
static int countSubstr(String str, int n,
                       char x, char y)
{
    // to store total count of
    // required substrings
    int tot_count = 0;
 
    // to store count of character
    // 'x' up to the point the
    // string 'str' has been
    // traversed so far
    int count_x = 0;
 
    // traverse 'str' from
    // left to right
    for (int i = 0; i < n; i++)
    {
 
        // if true, increment 'count_x'
        if (str.charAt(i) == x)
            count_x++;
 
        // if true accumulate 'count_x'
        // to 'tot_count'
        if (str.charAt(i) == y)
            tot_count += count_x;
    }
 
    // required count
    return tot_count;
}
 
// Driver code
public static void main(String args[])
{
    String str = "abbcaceghcak";
    int n = str.length();
    char x = 'a', y = 'c';
 
    System.out.print ("Count = " +
       countSubstr(str, n, x, y));
}
}
 
// This code is contributed
// by Subhadeep


Python3




# Python 3 implementation to count substrings
# starting with character X and ending
# with character Y
 
# function to count substrings starting with
# character X and ending with character Y
def countSubstr(str, n, x, y):
 
    # to store total count of
    # required substrings
    tot_count = 0
 
    # to store count of character 'x'
    # up to the point the string 'str'
    # has been traversed so far
    count_x = 0
 
    # traverse 'str' from left to right
    for i in range(n):
 
        # if true, increment 'count_x'
        if str[i] == x:
            count_x += 1
 
        # if true accumulate 'count_x'
        # to 'tot_count'
        if str[i] == y:
            tot_count += count_x
     
    # required count
    return tot_count
 
# Driver Code
str = 'abbcaceghcak'
n = len(str)
x, y = 'a', 'c'
print('Count =', countSubstr(str, n, x, y))
 
# This code is contributed SamyuktaSHegde


C#




// C# implementation to count substrings
// starting with character X and ending
// with character Y
using System;
 
class GFG
{
// function to count substrings starting
// with character X and ending with character Y
static int countSubstr(string str, int n,
                       char x, char y)
{
    // to store total count of
    // required substrings
    int tot_count = 0;
 
    // to store count of character 'x' up
    // to the point the string 'str' has
    // been traversed so far
    int count_x = 0;
 
    // traverse 'str' from left to right
    for (int i = 0; i < n; i++)
    {
 
        // if true, increment 'count_x'
        if (str[i] == x)
            count_x++;
 
        // if true accumulate 'count_x'
        // to 'tot_count'
        if (str[i] == y)
            tot_count += count_x;
    }
 
    // required count
    return tot_count;
}
 
// Driver code
public static void Main()
{
    string str = "abbcaceghcak";
    int n = str.Length;
    char x = 'a', y = 'c';
 
    Console.Write("Count = " +
    countSubstr(str, n, x, y));
}
}
 
// This code is contributed
// by Akanksha Rai


PHP




<?php
// PHP implementation to count substrings
// starting with character X and ending
// with character Y
 
// function to count substrings starting with
// character X and ending with character Y
function countSubstr($str, $n, $x, $y)
{
    // to store total count of
    // required substrings
    $tot_count = 0;
 
    // to store count of character 'x'
    // up to the point the string 'str'
    // has been traversed so far
    $count_x = 0;
 
    // traverse 'str' from left to right
    for ($i = 0; $i < $n; $i++)
    {
 
        // if true, increment 'count_x'
        if ($str[$i] == $x)
            $count_x++;
 
        // if true accumulate 'count_x'
        // to 'tot_count'
        if ($str[$i] == $y)
            $tot_count += $count_x;
    }
 
    // required count
    return $tot_count;
}
 
// Driver code
$str = "abbcaceghcak";
$n = strlen($str);
$x = 'a'; $y = 'c';
 
echo "Count = ". countSubstr($str, $n, $x, $y);
 
// This code is contributed
// by Akanksha Rai


Javascript




<script>
      // JavaScript implementation to count substrings
      // starting with character X and ending
      // with character Y
 
      // function to count substrings starting with
      // character X and ending with character Y
      function countSubstr(str, n, x, y) {
        // to store total count of
        // required substrings
        var tot_count = 0;
 
        // to store count of character 'x'
        // up to the point the string 'str'
        // has been traversed so far
        var count_x = 0;
 
        // traverse 'str' from left to right
        for (var i = 0; i < n; i++) {
          // if true, increment 'count_x'
          if (str[i] === x) count_x++;
 
          // if true accumulate 'count_x'
          // to 'tot_count'
          if (str[i] === y) tot_count += count_x;
        }
 
        // required count
        return tot_count;
      }
 
      // Driver code
 
      var str = "abbcaceghcak";
      var n = str.length;
      var x = "a",
        y = "c";
 
      document.write("Count = " + countSubstr(str, n, x, y));
    </script>


Output

Count = 5

Complexity Analysis:

  • Time Complexity: O(n), to iterate over the array where n is the size of the given string
  • Auxiliary Space: O(1),as no extra space is required


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