给定长度为N的二进制字符串str ,任务是找到可被2整除的最长子字符串。如果不存在这样的子字符串,则打印-1 。
例子:
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.
天真的方法:天真的方法将生成所有此类子字符串,并检查它们是否可被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