Largest sub-string of a binary string divisible by 2

• Last Updated : 13 May, 2021

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

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 using namespace std; // Function to return the largest// substring divisible by 2string 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 codeint main(){    string s = "11001";     cout << largestSubStr(s);     return 0;}

Java

 // Java implementation of the approachclass 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 2def 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 codeif __name__ == "__main__" :     s = "11001";     print(largestSubStr(s)); # This code is contributed by AnkitRai01

C#

 // C# implementation of the approachusing 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


Output:
1100

My Personal Notes arrow_drop_up