Count substring of Binary string such that each character belongs to a palindrome of size greater than 1

Given a binary string str, the task is to count the number of substrings of the given string str such that each character of the substring belongs to a palindromic substring of length at least 2.
Examples:

Input: S = “00111” 
Output:
Explanation: 
There are 6 such substrings in the given string such that each character belongs to a palindrome of size greater than 1 as {“00”, “0011”, “00111”, “11”, “111”, “11”}

Input: S = “0001011” 
Output: 15

Approach: The idea is to count the substrings in which every character doesn’t belongs to a palindromic substring and then substract this count from the total number of possible substrings of the string of size greater than 1. Below is the illustration of the steps:

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to find the
// substrings in binary string
// such that every character
// belongs to a palindrome
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to to find the
// substrings in binary string
// such that every character
// belongs to a palindrome
int countSubstrings(string s)
{
    int n = s.length();
  
    // Total substrings
    int answer = (n * (n - 1)) / 2;
  
    int cnt = 1;
    vector<int> v;
  
    // Loop to store the count of
    // continious characters in
    // the given string
    for (int i = 1; i < n; i++) {
  
        if (s[i] == s[i - 1])
            cnt++;
        else {
            v.push_back(cnt);
            cnt = 1;
        }
    }
  
    if (cnt > 0)
        v.push_back(cnt);
  
    // Subtract non special
    // strings from answer
    for (int i = 0;
         i < v.size() - 1; i++) {
        answer -= (v[i]
                   + v[i + 1]
                   - 1);
    }
  
    return answer;
}
  
// Driver Code
int main()
{
    // Given string s
    string s = "00111";
  
    // Function Call
    cout << countSubstrings(s);
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation to find the     
// substrings in binary string     
// such that every character         
// belongs to a palindrome     
import java.util.*;
  
class GFG{
      
// Function to to find the         
// substrings in binary string         
// such that every character     
// belongs to a palindrome         
public static int countSubstrings(String s)         
{     
    int n = s.length();         
              
    // Total substrings         
    int answer = (n * (n - 1)) / 2;         
              
    int cnt = 1;     
    Vector<Integer> v = new Vector<Integer>();     
              
    // Loop to store the count of     
    // continious characters in         
    // the given string         
    for(int i = 1; i < n; i++)
    {     
        if (s.charAt(i) == s.charAt(i - 1))         
            cnt++;     
        else 
        {         
            v.add(cnt);         
            cnt = 1;     
        }     
    }     
    if (cnt > 0)         
        v.add(cnt);         
              
    // Subtract non special         
    // strings from answer         
    for(int i = 0; i < v.size() - 1; i++)
    {         
        answer -= (v.get(i) + 
                   v.get(i + 1) - 1);     
    }     
    return answer;         
  
// Driver code
public static void main(String[] args)
{     
      
    // Given string s     
    String s = "00111";         
              
    // Function call     
    System.out.print(countSubstrings(s));     
}     
}     
  
// This code is contributed by divyeshrabadiya07
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation to find the
# substrings in binary string
# such that every character
# belongs to a palindrome
  
# Function to find the substrings in 
# binary string such that every 
# character belongs to a palindrome
def countSubstrings (s):
  
    n = len(s)
  
    # Total substrings
    answer = (n * (n - 1)) // 2
  
    cnt = 1
    v = []
  
    # Loop to store the count 
    # of continuous characters
    # in the given string
    for i in range(1, n):
        if (s[i] == s[i - 1]):
            cnt += 1
              
        else:
            v.append(cnt)
            cnt = 1
  
    if (cnt > 0):
        v.append(cnt)
  
    # Subtract non special strings
    # from answer
    for i in range(len(v) - 1):
        answer -= (v[i] + v[i + 1] - 1)
  
    return answer
  
# Driver Code
if __name__ == '__main__':
      
    # Given string 
    s = "00111"
  
    # Function call
    print(countSubstrings(s))
  
# This code is contributed by himanshu77
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation to find the     
// substrings in binary string     
// such that every character         
// belongs to a palindrome     
using System;
using System.Collections.Generic;
  
class GFG{
      
// Function to to find the         
// substrings in binary string         
// such that every character     
// belongs to a palindrome         
public static int countSubstrings(String s)         
{     
    int n = s.Length;         
              
    // Total substrings         
    int answer = (n * (n - 1)) / 2;         
              
    int cnt = 1;     
    List<int> v = new List<int>();     
              
    // Loop to store the count of     
    // continious characters in         
    // the given string         
    for(int i = 1; i < n; i++)
    {     
        if (s[i] == s[i-1])         
            cnt++;     
        else 
        {         
            v.Add(cnt);         
            cnt = 1;     
        }     
    }     
    if (cnt > 0)         
        v.Add(cnt);         
              
    // Subtract non special         
    // strings from answer         
    for(int i = 0; i < v.Count - 1; i++)
    {         
        answer -= (v[i] + 
                   v[i + 1] - 1);     
    }     
    return answer;         
  
// Driver code
public static void Main(String[] args)
{     
      
    // Given string s     
    String s = "00111";         
              
    // Function call     
    Console.Write(countSubstrings(s));     
}     
}     
  
// This code contributed by sapnasingh4991
chevron_right

Output: 
6

Time Complexity: O(N) 
Auxiliary Space: O(N)
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




Article Tags :