C# 基于备选方案0'验证字符串;s和1';s
我正在尝试编写一个方法,该方法将字符串作为输入,并将输出作为可以从中生成的子字符串的有效数量,该字符串只有0和1,形成的子字符串的长度只有偶数 有效子字符串场景: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()
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?