Given a binary string **S**, the task is to find the number of ways to split it into parts such that every part is divisible by **2**.

**Examples:**

Input:S = “100”

Output:2

There are two ways to split the string:

{“10”, “0”} and {“100”}

Input:S = “110”

Output:1

**Approach:** One observation is that the string can only be split after a **0**. Thus, count the number of zeros in the string. Let’s call this count as **c_zero**. Assuming the case when the string is even, for every **0** except for the rightmost one, there are two choices i.e. either cut the string after that zero or don’t. Thus, the final answer becomes **2 ^{(c_zero – 1)}** for even strings.

The case, where the string can’t be split is the case when it ends at a

**1**. Thus, for odd strings answer will always be zero as the last split part will always be odd.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `#define maxN 20 ` `#define maxM 64 ` ` ` `// Function to return the required count ` `int` `cntSplits(string s) ` `{ ` ` ` `// If the splitting is not possible ` ` ` `if` `(s[s.size() - 1] == ` `'1'` `) ` ` ` `return` `0; ` ` ` ` ` `// To store the count of zeroes ` ` ` `int` `c_zero = 0; ` ` ` ` ` `// Counting the number of zeroes ` ` ` `for` `(` `int` `i = 0; i < s.size(); i++) ` ` ` `c_zero += (s[i] == ` `'0'` `); ` ` ` ` ` `// Return the final answer ` ` ` `return` `(` `int` `)` `pow` `(2, c_zero - 1); ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `string s = ` `"10010"` `; ` ` ` ` ` `cout << cntSplits(s); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation of the approach ` `class` `GFG ` `{ ` ` ` `static` `int` `maxN = ` `20` `; ` `static` `int` `maxM = ` `64` `; ` ` ` `// Function to return the required count ` `static` `int` `cntSplits(String s) ` `{ ` ` ` `// If the splitting is not possible ` ` ` `if` `(s.charAt(s.length() - ` `1` `) == ` `'1'` `) ` ` ` `return` `0` `; ` ` ` ` ` `// To store the count of zeroes ` ` ` `int` `c_zero = ` `0` `; ` ` ` ` ` `// Counting the number of zeroes ` ` ` `for` `(` `int` `i = ` `0` `; i < s.length(); i++) ` ` ` `c_zero += (s.charAt(i) == ` `'0'` `) ? ` `1` `: ` `0` `; ` ` ` ` ` `// Return the final answer ` ` ` `return` `(` `int` `)Math.pow(` `2` `, c_zero - ` `1` `); ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String []args) ` `{ ` ` ` `String s = ` `"10010"` `; ` ` ` ` ` `System.out.println(cntSplits(s)); ` `} ` `} ` ` ` `// This code is contributed by PrinciRaj1992 ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation of the approach ` ` ` `# Function to return the required count ` `def` `cntSplits(s) : ` ` ` ` ` `# If the splitting is not possible ` ` ` `if` `(s[` `len` `(s) ` `-` `1` `] ` `=` `=` `'1'` `) : ` ` ` `return` `0` `; ` ` ` ` ` `# To store the count of zeroes ` ` ` `c_zero ` `=` `0` `; ` ` ` ` ` `# Counting the number of zeroes ` ` ` `for` `i ` `in` `range` `(` `len` `(s)) : ` ` ` `c_zero ` `+` `=` `(s[i] ` `=` `=` `'0'` `); ` ` ` ` ` `# Return the final answer ` ` ` `return` `int` `(` `pow` `(` `2` `, c_zero ` `-` `1` `)); ` ` ` `# Driver code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` ` ` `s ` `=` `"10010"` `; ` ` ` ` ` `print` `(cntSplits(s)); ` ` ` `# This code is contributed by AnkitRai01 ` |

*chevron_right*

*filter_none*

## C#

`// C# implementation of the approach ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `static` `int` `maxN = 20; ` `static` `int` `maxM = 64; ` ` ` `// Function to return the required count ` `static` `int` `cntSplits(String s) ` `{ ` ` ` `// If the splitting is not possible ` ` ` `if` `(s[s.Length - 1] == ` `'1'` `) ` ` ` `return` `0; ` ` ` ` ` `// To store the count of zeroes ` ` ` `int` `c_zero = 0; ` ` ` ` ` `// Counting the number of zeroes ` ` ` `for` `(` `int` `i = 0; i < s.Length; i++) ` ` ` `c_zero += (s[i] == ` `'0'` `) ? 1 : 0; ` ` ` ` ` `// Return the final answer ` ` ` `return` `(` `int` `)Math.Pow(2, c_zero - 1); ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main(String []args) ` `{ ` ` ` `String s = ` `"10010"` `; ` ` ` ` ` `Console.WriteLine(cntSplits(s)); ` `} ` `} ` ` ` `// This code is contributed by 29AjayKumar ` |

*chevron_right*

*filter_none*

**Output:**

4

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.

## Recommended Posts:

- Split the number into N parts such that difference between the smallest and the largest part is minimum
- Split a number as sum of K numbers which are not divisible by K
- Number of ways to split N as sum of K numbers from the given range
- Count of ways to split a given number into prime segments
- Split the number N by maximizing the count of subparts divisible by K
- Number of ways a convex polygon of n+2 sides can split into triangles by connecting vertices
- Split the binary string into substrings with equal number of 0s and 1s
- Number of sub-strings in a given binary string divisible by 2
- Number of subsequences in a given binary string divisible by 2
- Split a number into 3 parts such that none of the parts is divisible by 3
- Number of ways to erase exactly one element in the Binary Array to make XOR zero
- Number of sub-sequences of non-zero length of a binary string divisible by 3
- Maximum splits in binary string such that each substring is divisible by given odd number
- Number of ways to make binary string of length N such that 0s always occur together in groups of size K
- Number of distinct ways to represent a number as sum of K unique primes
- Number of ways to calculate a target number using only array elements
- Count number of ways to divide a number in 4 parts
- Find the number of ways to divide number into four parts such that a = c and b = d
- Minimum number of swaps required to make a number divisible by 60
- Split an array into groups of 3 such that X3 is divisible by X2 and X2 is divisible by X1

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.