C# 基于备选方案0'验证字符串;s和1';s

C# 基于备选方案0'验证字符串;s和1';s,c#,string,validation,dynamic-programming,C#,String,Validation,Dynamic Programming,我正在尝试编写一个方法,该方法将字符串作为输入,并将输出作为可以从中生成的子字符串的有效数量,该字符串只有0和1,形成的子字符串的长度只有偶数 有效子字符串场景: public static int counting(string s) { //make into substrings function var substrs = SubStrings(s); foreach (var str in substrs.ToList()

我正在尝试编写一个方法,该方法将字符串作为输入,并将输出作为可以从中生成的子字符串的有效数量,该字符串只有0和1,形成的子字符串的长度只有偶数

有效子字符串场景:

 public static int counting(string s)
        {
      //make into substrings function
        var substrs = SubStrings(s);

        foreach (var str in substrs.ToList())
        {
            if (!IsValidStr(str))
                substrs.Remove(str);
        }
        var validstr=substrs.Distinct();

        return validstr.Count();
    }

 private static List<string> SubStrings(string s)
    {
        List<string> substrs = new List<string>();

        for (int i = 0; i < s.Length; i++)
        {
            for (int j = 2; j < s.Length; j += 2)
            {
                if ((s.Length - i >= j))
                {
                    substrs.Add(s.Substring(i, j));
                }
            }

        }
        return substrs;
    }
子字符串仅对连续的0和1有效

样本输入:

 public static int counting(string s)
        {
      //make into substrings function
        var substrs = SubStrings(s);

        foreach (var str in substrs.ToList())
        {
            if (!IsValidStr(str))
                substrs.Remove(str);
        }
        var validstr=substrs.Distinct();

        return validstr.Count();
    }

 private static List<string> SubStrings(string s)
    {
        List<string> substrs = new List<string>();

        for (int i = 0; i < s.Length; i++)
        {
            for (int j = 2; j < s.Length; j += 2)
            {
                if ((s.Length - i >= j))
                {
                    substrs.Add(s.Substring(i, j));
                }
            }

        }
        return substrs;
    }
假设我们有一个字符串00110,我们从中得到的子字符串是00,01,11,1000110110(只有偶数长度奇数长度的子字符串像001011110一样无效),其中只有这些子字符串是有效的01,100011,具有连续的0和1

因此,上述情况下的输出为3

条件:
输入字符串长度将低于
5此函数将验证您的子字符串,我相信这正是您需要帮助的地方

我的理解是,子字符串必须至少有一个1和一个0。它们必须连续分组

这个概念基本上是循环数字,检查它们是否变化不止一次。最后,我们检查以确保是否已更改一次

bool IsValidSubstring(string s)
{
    // Check for a valid length substring.
    if(s.Length == 0 || s.Length % 2 != 0)
        return false;

    // Loop each character and make sure it doesn't change more than once.
    char last = s[0];
    bool hasChanged = false;
    for(var c in s)
    {
        // Check for a change in character.
        if(c != last)
        {
            // If it has already changed once, then it's invalid.
            if(hasChanged)
                return false;
            hasChanged = true;
        }
        last = c;
    }

    // If we get here, the only thing left to check is that it has changed at least once.
    return hasChanged;
}
对于:
01,100011
对于:
00,110110

这正是您所要求的。

好吧,第一个测试是检查它们的长度是否相等
substr.Length%2==0
您尝试了什么?现在你只想让我们为你写一个递归方法“连续的0和1”是什么意思?为什么<代码> 0110 >代码>有效?我是正确的吗?当你的意思是连续的时候,你的意思是一旦它改变(从0到1,或者1到0),那么它就不能再变回来了。考虑输入<代码> 00100 < /代码>。有效的子字符串是从左到右、
00
01
10
00
。但是
00
出现两次。正确答案是3还是4?