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

• Last Updated : 30 Dec, 2021

Given 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 belong to a palindromic substring and then subtract this count from the total number of possible substrings of the string of size greater than 1. Below is the illustration of the steps:

• It can be observed that if we take the substring a2a3….ak-1 (i.e. without starting and ending character), then each of its characters may belong to some palindrome.Proof:
```If ai == ai-1 or ai == ai+1,
Then it belongs to a palindrome of length 2.

Otherwise, If ai != ai-1,
ai != ai+1 and ai+1 == ai-1,
Then, It belongs to a palindrome of size 3.```
• Therefore, there are four patterns of substrings in which each character doesn’t belong to the palindrome:
1. “0111….11”
2. “100…..00”
3. “111….110”
4. “000….001”
• Finally, subtract this count from the total number of substrings possible of length greater than 1.

Count = (N*(N – 1)/2) – (Count of the substrings in which each character doesn’t belongs to palindrome)

Below is the implementation of the above approach:

## C++

 `// C++ implementation to find the``// substrings in binary string``// such that every character``// belongs to a palindrome` `#include ``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``    ``// continuous 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;``}`

## Java

 `// 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 v = ``new` `Vector();    ``            ` `    ``// Loop to store the count of    ``    ``// continuous 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`

## Python3

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

## C#

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

## Javascript

 ``

Output:

`6`

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

My Personal Notes arrow_drop_up