要删除的最小字符数以使二进制字符串交替
给定一个二进制字符串,任务是找到要从中删除的最小字符数,以便它成为备用。如果没有两个连续的 0 或 1,则二进制字符串是交替的。
例子 :
Input : s = "000111"
Output : 4
We need to delete two 0s and
two 1s to make string alternate.
Input : s = "0000"
Output : 3
We need to delete three characters
to make it alternate.
Input : s = "11111"
Output : 4
Input : s = "01010101"
Output : 0
Input : s = "101010"
Output : 0
这个问题有以下简单的解决方案。
我们从左到右遍历字符串并将当前字符与下一个字符进行比较。
- 如果 current 和 next 不同,则无需执行删除。
- 如果 current 和 next 相同,我们需要执行一次删除操作以使它们交替。
下面是上述算法的实现。
C++
// C++ program to find minimum number
// of characters to be removed to make
// a string alternate.
#include
using namespace std;
// Returns count of minimum characters to
// be removed to make s alternate.
void countToMake0lternate(const string& s)
{
int result = 0;
for (int i = 0; i < (s.length() - 1); i++)
// if two alternating characters
// of string are same
if (s[i] == s[i + 1])
result++; // then need to
// delete a character
return result;
}
// Driver code
int main()
{
cout << countToMake0lternate("000111") << endl;
cout << countToMake0lternate("11111") << endl;
cout << countToMake0lternate("01010101") << endl;
return 0;
}
Java
// Java program to find minimum number
// of characters to be removed to make
// a string alternate.
import java.io.*;
public class GFG {
// Returns count of minimum characters to
// be removed to make s alternate.
static int countToMake0lternate(String s)
{
int result = 0;
for (int i = 0; i < (s.length() - 1); i++)
// if two alternating characters
// of string are same
if (s.charAt(i) == s.charAt(i + 1))
result++; // then need to
// delete a character
return result;
}
// Driver code
static public void main(String[] args)
{
System.out.println(countToMake0lternate("000111"));
System.out.println(countToMake0lternate("11111"));
System.out.println(countToMake0lternate("01010101"));
}
}
// This code is contributed by vt_m.
Python 3
# Python 3 program to find minimum number
# of characters to be removed to make
# a string alternate.
# Returns count of minimum characters
# to be removed to make s alternate.
def countToMake0lternate(s):
result = 0
for i in range(len(s) - 1):
# if two alternating characters
# of string are same
if (s[i] == s[i + 1]):
result += 1 # then need to
# delete a character
return result
# Driver code
if __name__ == "__main__":
print(countToMake0lternate("000111"))
print(countToMake0lternate("11111"))
print(countToMake0lternate("01010101"))
# This code is contributed by ita_c
C#
// C# program to find minimum number
// of characters to be removed to make
// a string alternate.
using System;
public class GFG {
// Returns count of minimum characters to
// be removed to make s alternate.
static int countToMake0lternate(string s)
{
int result = 0;
for (int i = 0; i < (s.Length - 1); i++)
// if two alternating characters
// of string are same
if (s[i] == s[i + 1])
result++; // then need to
// delete a character
return result;
}
// Driver code
static public void Main()
{
Console.WriteLine(countToMake0lternate("000111"));
Console.WriteLine(countToMake0lternate("11111"));
Console.WriteLine(countToMake0lternate("01010101"));
}
}
// This article is contributed by vt_m.
PHP
Javascript
输出:
4
4
0