📌  相关文章
📜  二进制字符串的最大子字符串可被2整除

📅  最后修改于: 2021-04-29 00:58:27             🧑  作者: Mango

给定长度为N的二进制字符串str ,任务是找到可被2整除的最长子字符串。如果不存在这样的子字符串,则打印-1

例子:

天真的方法:天真的方法将生成所有此类子字符串,并检查它们是否可被2整除。该方法的时间复杂度为O(N 3 )。

更好的方法:一种直接的方法是从字符串的末尾删除字符,而最后一个字符为1 。遇到0的时刻,当前字符串将被2整除,因为它以0结尾。这种方法的时间复杂度将为O(N)。

下面是上述方法的实现:

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


输出:
1100