Count number of substrings of a string consisting of same characters - GeeksforGeeks

26 Aug, 2021
Given a string. The task is to find out the numbers of substrings consisting of the same characters.
Examples: 
Input: abba Output: 5 The desired substrings are {a}, {b}, {b}, {a}, {bb}
Input: bbbcbb Output: 10  
Approach: It is known for a string of length n, there are a total of n*(n+1)/2 number of substrings.Let’s initialize the result to 0. Traverse the string and find the number of consecutive element(let’s say count) of same characters. Whenever we find another character, increment the result by count*(count+1)/2, set count to 1, and from that index, repeat the above process.Remember, for each different character, the number of our desired substring is 1.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation// of the above approach#include <bits/stdc++.h>using namespace std; // Function to return the// number of substrings of// same charactersvoid findNumbers(string s){      if (s.empty()) return 0;    // Size of the string    int n = s.size();     // Initialize count to 1    int count = 1;    int result = 0;     // Initialize left to 0 and    // right to 1 to traverse the    // string    int left = 0;    int right = 1;     while (right < n) {         // Checking if consecutive        // characters are same and        // increment the count        if (s[left] == s[right]) {            count++;        }         // When we encounter a        // different characters        else {             // Increment the result            result += count * (count + 1) / 2;             // To repeat the whole            // process set left equals            // right and count variable to 1            left = right;            count = 1;        }         right++;    }     // Store the final    // value of result    result += count * (count + 1) / 2;     cout << result << endl;} // Driver codeint main(){    string s = "bbbcbb";     findNumbers(s);}
// Java implementation of the approachclass GFG{         // Function to return the    // number of substrings of    // same characters    static void findNumbers(String s)    {        // Size of the string        int n = s.length();             // Initialize count to 1        int count = 1;        int result = 0;             // Initialize left to 0 and        // right to 1 to traverse the        // string        int left = 0;        int right = 1;             while (right < n)        {                 // Checking if consecutive            // characters are same and            // increment the count            if (s.charAt(left) == s.charAt(right))            {                count++;            }                 // When we encounter a            // different characters            else            {                     // Increment the result                result += count * (count + 1) / 2;                     // To repeat the whole                // process set left equals                // right and count variable to 1                left = right;                count = 1;            }                 right++;        }             // Store the final        // value of result        result += count * (count + 1) / 2;             System.out.println(result);    }     // Driver code    public static void main (String[] args)    {        String s = "bbbcbb";         findNumbers(s);    }} // This code is contributed by AnkitRai01
# Python3 implementation of the above approach # Function to return the number of# substrings of same charactersdef findNumbers(s):         # Size of the string    n = len(s)     # Initialize count to 1    count = 1    result = 0     # Initialize left to 0 and right to 1    # to traverse the string    left = 0    right = 1     while (right < n):         # Checking if consecutive        # characters are same and        # increment the count        if (s[left] == s[right]):            count += 1         # When we encounter a        # different characters        else:             # Increment the result            result += count * (count + 1) // 2             # To repeat the whole            # process set left equals            # right and count variable to 1            left = right            count = 1         right += 1     # Store the final value of result    result += count * (count + 1) // 2     print(result) # Driver codes = "bbbcbb" findNumbers(s) # This code is contributed by Mohit Kumar
// C# implementation of the approachusing System; class GFG{    // Function to return the    // number of substrings of    // same characters    static void findNumbers(String s)    {        // Size of the string        int n = s.Length;         // Initialize count to 1        int count = 1;        int result = 0;         // Initialize left to 0 and        // right to 1 to traverse the        // string        int left = 0;        int right = 1;         while (right < n)        {            // Checking if consecutive            // characters are same and            // increment the count            if (s[left] == s[right])                count++;             // When we encounter a            // different characters            else            {                // Increment the result                result += count * (count + 1) / 2;                 // To repeat the whole                // process set left equals                // right and count variable to 1                left = right;                count = 1;            }            right++;        }         // Store the final        // value of result        result += count * (count + 1) / 2;         Console.WriteLine(result);    }     // Driver code    public static void Main(String[] args)    {        String s = "bbbcbb";         findNumbers(s);    }} // This code is contributed by// sanjeev2552
<script> // Javascript implementation// of the above approach // Function to return the// number of substrings of// same charactersfunction findNumbers(s){         // Size of the string    var n = s.length;     // Initialize count to 1    var count = 1;    var result = 0;     // Initialize left to 0 and    // right to 1 to traverse the    // string    var left = 0;    var right = 1;     while (right < n)    {                 // Checking if consecutive        // characters are same and        // increment the count        if (s[left] == s[right])        {            count++;        }         // When we encounter a        // different characters        else        {                         // Increment the result            result += parseInt(count * (count + 1) / 2);             // To repeat the whole            // process set left equals            // right and count variable to 1            left = right;            count = 1;        }        right++;    }     // Store the final    // value of result    result += parseInt(count * (count + 1) / 2);     document.write(result);} // Driver codevar s = "bbbcbb"; findNumbers(s); // This code is contributed by itsok </script>
10
 
ankthon
sanjeev2552
mohit kumar 29
itsok
kk773572498
deepakpunjabi
substring
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 50 String Coding Problems for Interviews
Naive algorithm for Pattern Searching
Vigenère Cipher
Hill Cipher
Count words in a given string
How to Append a Character to a String in C
Convert character array to string in C++
Program to count occurrence of a given character in a string
sprintf() in C
Converting Roman Numerals to Decimal lying between 1 to 3999