Count substrings that starts with character X and ends with character Y
Last Updated :
31 Jan, 2023
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++
#include <bits/stdc++.h>
using namespace std;
int countSubstr(string str, int n,
char x, char y)
{
int tot_count = 0;
int count_x = 0;
for ( int i = 0; i < n; i++) {
if (str[i] == x)
count_x++;
if (str[i] == y)
tot_count += count_x;
}
return tot_count;
}
int main()
{
string str = "abbcaceghcak" ;
int n = str.size();
char x = 'a' , y = 'c' ;
cout << "Count = "
<< countSubstr(str, n, x, y);
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
static int countSubstr(String str, int n,
char x, char y)
{
int tot_count = 0 ;
int count_x = 0 ;
for ( int i = 0 ; i < n; i++)
{
if (str.charAt(i) == x)
count_x++;
if (str.charAt(i) == y)
tot_count += count_x;
}
return tot_count;
}
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));
}
}
|
Python3
def countSubstr( str , n, x, y):
tot_count = 0
count_x = 0
for i in range (n):
if str [i] = = x:
count_x + = 1
if str [i] = = y:
tot_count + = count_x
return tot_count
str = 'abbcaceghcak'
n = len ( str )
x, y = 'a' , 'c'
print ( 'Count =' , countSubstr( str , n, x, y))
|
C#
using System;
class GFG
{
static int countSubstr( string str, int n,
char x, char y)
{
int tot_count = 0;
int count_x = 0;
for ( int i = 0; i < n; i++)
{
if (str[i] == x)
count_x++;
if (str[i] == y)
tot_count += count_x;
}
return tot_count;
}
public static void Main()
{
string str = "abbcaceghcak" ;
int n = str.Length;
char x = 'a' , y = 'c' ;
Console.Write( "Count = " +
countSubstr(str, n, x, y));
}
}
|
PHP
<?php
function countSubstr( $str , $n , $x , $y )
{
$tot_count = 0;
$count_x = 0;
for ( $i = 0; $i < $n ; $i ++)
{
if ( $str [ $i ] == $x )
$count_x ++;
if ( $str [ $i ] == $y )
$tot_count += $count_x ;
}
return $tot_count ;
}
$str = "abbcaceghcak" ;
$n = strlen ( $str );
$x = 'a' ; $y = 'c' ;
echo "Count = " . countSubstr( $str , $n , $x , $y );
|
Javascript
<script>
function countSubstr(str, n, x, y) {
var tot_count = 0;
var count_x = 0;
for ( var i = 0; i < n; i++) {
if (str[i] === x) count_x++;
if (str[i] === y) tot_count += count_x;
}
return tot_count;
}
var str = "abbcaceghcak" ;
var n = str.length;
var x = "a" ,
y = "c" ;
document.write( "Count = " + countSubstr(str, n, x, y));
</script>
|
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
Share your thoughts in the comments
Please Login to comment...