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

• It can be observed that if we take the substring a2a3….ak-1 (i.e. without starting and ending character), then each of it’s character 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++ 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 ` `    ``// 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; ` `} `

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

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

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.