# Largest sub-string of a binary string divisible by 2

Given binary string **str** of length **N**, the task is to find the longest sub-string divisible by **2**. If no such sub-string exists then print **-1**.

**Examples:**

Input:str = “11100011”Output:111000

Largest sub-string divisible by 2 is “111000”.Input:str = “1111”Output:-1

There is no sub-string of the given string

which is divisible by 2.

**Naive approach:** A naive approach will be to generate all such sub-strings and check if they are divisible by 2. The time complexity of this approach will be O(N^{3}).

**Better approach:** A straightforward approach will be to remove characters from the end of the string while the last character is **1**. The moment a **0** is encountered, the current string will be divisible by **2** as it ends at a **0**. The time complexity of this approach will be O(N).

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to return the largest` `// substring divisible by 2` `string largestSubStr(string s)` `{` ` ` `// While the last character of` ` ` `// the string is '1', pop it` ` ` `while` `(s.size() and s[s.size() - 1] == ` `'1'` `)` ` ` `s.pop_back();` ` ` `// If the original string had no '0'` ` ` `if` `(s.size() == 0)` ` ` `return` `"-1"` `;` ` ` `else` ` ` `return` `s;` `}` `// Driver code` `int` `main()` `{` ` ` `string s = ` `"11001"` `;` ` ` `cout << largestSubStr(s);` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `class` `GFG` `{` ` ` ` ` `// Function to return the largest` ` ` `// substring divisible by 2` ` ` `static` `String largestSubStr(String s)` ` ` `{` ` ` `// While the last character of` ` ` `// the string is '1', pop it` ` ` `while` `(s.length() != ` `0` `&&` ` ` `s.charAt(s.length() - ` `1` `) == ` `'1'` `)` ` ` `s = s.substring(` `0` `, s.length() - ` `1` `);` ` ` ` ` `// If the original string had no '0'` ` ` `if` `(s.length() == ` `0` `)` ` ` `return` `"-1"` `;` ` ` `else` ` ` `return` `s;` ` ` `}` ` ` ` ` `// Driver code` ` ` `public` `static` `void` `main (String[] args)` ` ` `{` ` ` `String s = ` `"11001"` `;` ` ` ` ` `System.out.println(largestSubStr(s));` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## Python3

`# Python3 implementation of the approach` `# Function to return the largest` `# substring divisible by 2` `def` `largestSubStr(s) :` ` ` `# While the last character of` ` ` `# the string is '1', pop it` ` ` `while` `(` `len` `(s) ` `and` `s[` `len` `(s) ` `-` `1` `] ` `=` `=` `'1'` `) :` ` ` `s ` `=` `s[:` `len` `(s) ` `-` `1` `];` ` ` `# If the original string had no '0'` ` ` `if` `(` `len` `(s) ` `=` `=` `0` `) :` ` ` `return` `"-1"` `;` ` ` `else` `:` ` ` `return` `s;` `# Driver code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `s ` `=` `"11001"` `;` ` ` `print` `(largestSubStr(s));` `# This code is contributed by AnkitRai01` |

## C#

`// C# implementation of the approach` `using` `System;` `class` `GFG` `{` ` ` ` ` `// Function to return the largest` ` ` `// substring divisible by 2` ` ` `static` `string` `largestSubStr(` `string` `s)` ` ` `{` ` ` `// While the last character of` ` ` `// the string is '1', pop it` ` ` `while` `(s.Length != 0 &&` ` ` `s[s.Length - 1] == ` `'1'` `)` ` ` `s = s.Substring(0, s.Length - 1);` ` ` ` ` `// If the original string had no '0'` ` ` `if` `(s.Length == 0)` ` ` `return` `"-1"` `;` ` ` `else` ` ` `return` `s;` ` ` `}` ` ` ` ` `// Driver code` ` ` `public` `static` `void` `Main ()` ` ` `{` ` ` `string` `s = ` `"11001"` `;` ` ` ` ` `Console.WriteLine(largestSubStr(s));` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## Javascript

`<script>` `// Javascript implementation of the approach` `// Function to return the largest` `// substring divisible by 2` `function` `largestSubStr(s)` `{` ` ` `// While the last character of` ` ` `// the string is '1', pop it` ` ` `while` `(s.length && s[s.length - 1] == ` `'1'` `)` ` ` `s = s.substring(0,s.length-1);;` ` ` `// If the original string had no '0'` ` ` `if` `(s.length == 0)` ` ` `return` `"-1"` `;` ` ` `else` ` ` `return` `s;` `}` `// Driver code` `var` `s = ` `"11001"` `;` `document.write( largestSubStr(s));` `</script>` |

**Output:**

1100