Related Articles
Largest sub-string of a binary string divisible by 2
• Last Updated : 03 Jan, 2020

Given a 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.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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(N3).

Better approach: A straight forward 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 ``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 `
Output:
```1100
```

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.

My Personal Notes arrow_drop_up