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:6Explanation:

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:

- It can be observed that if we take the substring a
_{2}a_{3}….a_{k-1}(i.e. without starting and ending character), then each of it’s character may belong to some palindrome.**Proof:**If a

_{i}== a_{i-1}or a_{i}== a_{i+1}, Then it belongs to a palindrome of length 2. Otherwise, If a_{i}!= a_{i-1}, a_{i}!= a_{i+1}and a_{i+1}== a_{i-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:
- “0111….11”
- “100…..00”
- “111….110”
- “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 <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*

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

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

*chevron_right*

*filter_none*

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

*filter_none*

**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.