c# - 从二进制字符串中获取具有相同编号的子字符串。 1 和 0 作为单独的组

标签 c# algorithm

我想将一个二进制数字字符串分成满足以下两个条件的子字符串

1.子串中0和1的个数必须相等。
2.子串必须将0和1分别组合在一起。

示例 1:

输入:

1100110010

输出:

“1100”、“1100”、“10”、“01”、“01”、“10”、“10”、“0011”

示例 2:

输入:

1100

输出:

“1100”,“10”

我尝试了多种方法,但都失败了。

尝试:

   string binaryString = "1100110010";
    List<string> substrings = new List<string>();
    int startIndex = 0;
    int endIndex = 0;

    while (endIndex < binaryString.Length)
    {
        int zeros = 0;
        int ones = 0;
        endIndex = startIndex;

        while (endIndex < binaryString.Length && ((zeros == 0 && ones == 0) || (binaryString[endIndex] == binaryString[endIndex - 1])))
        {
            if (binaryString[endIndex] == '0')
            {
                zeros++;
            }
            else
            {
                ones++;
            }
            endIndex++;
        }

        if (zeros == ones)
        {
            substrings.Add(binaryString.Substring(startIndex, endIndex - startIndex));
        }

        startIndex = endIndex;
    }

    foreach (string substring in substrings)
    {
        Console.WriteLine(substring);
    }

请帮我解决这个问题!

最佳答案

这是一个根据您的条件和测试用例运行的算法:

    string entry = "1100110010";

    for (int i = 0; i < entry.Length; i++)
        for (int j = i; j < entry.Length - 1; j++)
        {
            string newSub = entry.Substring(i, entry.Length-j);        
            if (newSub.Length % 2 == 0 && newSub.Length>=2)
            {
                string subLeft = newSub.Substring(0,newSub.Length/2);
                string subRight = newSub.Substring(newSub.Length / 2, newSub.Length / 2);
                int leftSum = subLeft.Sum(x => x - '0');
                int rightSum = subRight.Sum(x => x - '0');
                if ((leftSum == subLeft.Length && rightSum ==0) ||
                   (rightSum == subRight.Length && leftSum == 0))
                    Console.WriteLine(newSub);
            }
        }

说明: Fors 通过逐个字符分解给定的字符串来帮助获取所有组合。然后我们测试每个子字符串的长度是否为偶数,因为我们要查找的所有对都应该是偶数。接下来,我们将前一个子字符串分成两个相等的部分,并尝试将每个部分的数字相加。如果相加的总和与求和部分的长度相同(例如 111 -> 3,因为它们应该分组)或者总和为 0(例如 000 -> 0),那么这就是我们要查找的子字符串。

关于c# - 从二进制字符串中获取具有相同编号的子字符串。 1 和 0 作为单独的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75853569/

相关文章:

c# - 错误 属性 'xxxx' 是对象关键信息的一部分,无法在 WCF RIA 服务中修改

database - HyperLogLog 算法如何工作?

algorithm - 我应该使用哪种算法来分析所有商品之间的关系?

c# - 如果一个类继承自一个本身实现了 IDisposable 的接口(interface),该类是否也应该实现 IDisposable?

c# - 如何制作 1 :many relationship between models with different query ( linq syntax )

c# - 工作表 get_Range 抛出异常

java - 为什么我在 Ruby 中使用递归时无法得到正确答案?

algorithm - 最佳地重新排序钱包中的卡?

javascript - 棋盘游戏获胜情况 - 搜索算法

c# - 控制台应用程序中的 Application.Current "null"