Related Articles

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

• Last Updated : 14 May, 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``    ``// 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

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

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

## Javascript

 ``
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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up