要删除的最小回文子序列数以清空二进制字符串
给定一个二进制字符串,计算要删除的最小子序列数,使其成为空字符串。
例子 :
Input: str[] = "10001"
Output: 1
Since the whole string is palindrome,
we need only one removal.
Input: str[] = "10001001"
Output: 2
We can remove the middle 1 as first
removal, after first removal string
becomes 1000001 which is a palindrome.
预期时间复杂度:O(n)
我们强烈建议您单击此处并进行练习,然后再继续使用解决方案。
这个问题很简单,可以使用以下两个事实轻松解决。
1)如果给定的字符串是回文,我们只需要删除一次。
2)否则我们需要两次移除。请注意,每个二进制字符串都将全 1 作为子序列,将全 0 作为另一个子序列。我们可以删除两个子序列中的任何一个来获得一元字符串。一元字符串总是回文。
C++
// C++ program to count minimum palindromic subsequences
// to be removed to make an string empty.
#include
using namespace std;
// A function to check if a string str is palindrome
bool isPalindrome(const char *str)
{
// Start from leftmost and rightmost corners of str
int l = 0;
int h = strlen(str) - 1;
// Keep comparing characters while they are same
while (h > l)
if (str[l++] != str[h--])
return false;
return true;
}
// Returns count of minimum palindromic subsequences to
// be removed to make string empty
int minRemovals(const char *str)
{
// If string is empty
if (str[0] == '')
return 0;
// If string is palindrome
if (isPalindrome(str))
return 1;
// If string is not palindrome
return 2;
}
// Driver code to test above
int main()
{
cout << minRemovals("010010") << endl;
cout << minRemovals("0100101") << endl;
return 0;
}
Java
// Java program to count minimum palindromic
// subsequences to be removed to make
// an string empty.
import java.io.*;
class GFG {
// A function to check if a string
// str is palindrome
static boolean isPalindrome(String str)
{
// Start from leftmost and rightmost
// corners of str
int l = 0;
int h = str.length() - 1;
// Keep comparing characters
// while they are same
while (h > l)
if (str.charAt(l++) != str.charAt(h--))
return false;
return true;
}
// Returns count of minimum palindromic
// subsequences to be removed to
// make string empty
static int minRemovals(String str)
{
// If string is empty
if (str.charAt(0) == '')
return 0;
// If string is palindrome
if (isPalindrome(str))
return 1;
// If string is not palindrome
return 2;
}
// Driver code to test above
public static void main (String[] args)
{
System.out.println (minRemovals("010010"));
System.out.println (minRemovals("0100101"));
}
}
// This code is contributed by vt_m.
Python3
# Python program to count minimum
# palindromic subsequences to
# be removed to make an string
# empty.
# A function to check if a
# string str is palindrome
def isPalindrome(str):
# Start from leftmost and
# rightmost corners of str
l = 0
h = len(str) - 1
# Keep comparing characters
# while they are same
while (h > l):
if (str[l] != str[h]):
return 0
l = l + 1
h = h - 1
return 1
# Returns count of minimum
# palindromic subsequences to
# be removed to make string
# empty
def minRemovals(str):
#If string is empty
if (str[0] == ''):
return 0
#If string is palindrome
if (isPalindrome(str)):
return 1
# If string is not palindrome
return 2
# Driver code
print(minRemovals("010010"))
print(minRemovals("0100101"))
# This code is contributed by Sam007.
C#
// C# program to count minimum palindromic
// subsequences to be removed to make
// an string empty.
using System;
class GFG
{
// A function to check if a
// string str is palindrome
static bool isPalindrome(String str)
{
// Start from leftmost and
// rightmost corners of str
int l = 0;
int h = str.Length - 1;
// Keep comparing characters
// while they are same
while (h > l)
if (str[l++] != str[h--])
return false;
return true;
}
// Returns count of minimum palindromic
// subsequences to be removed to
// make string empty
static int minRemovals(String str)
{
// If string is empty
if (str[0] == '')
return 0;
// If string is palindrome
if (isPalindrome(str))
return 1;
// If string is not palindrome
return 2;
}
// Driver code to
public static void Main ()
{
Console.WriteLine(minRemovals("010010"));
Console.WriteLine(minRemovals("0100101"));
}
}
// This code is contributed by Sam007
PHP
$l)
if ($str[$l++] != $str[$h--])
return false;
return true;
}
// Returns count of minimum
// palindromic subsequences
// to be removed to make
// string empty
function minRemovals($str)
{
// If string is empty
if ($str[0] == '')
return 0;
// If string is palindrome
if (isPalindrome($str))
return 1;
// If string is not palindrome
return 2;
}
// Driver Code
echo minRemovals("010010"), "\n";
echo minRemovals("0100101") , "\n";
// This code is contributed by ajit
?>
Javascript
输出 :
1
2
练习:
- 扩展上述解决方案以计算要删除的最小子序列数,使其成为空字符串。
- 三元字符串的最大计数是多少