【发布时间】:2026-02-08 17:40:02
【问题描述】:
我正在尝试编写一个将字符串作为输入并将输出作为可以从中生成的有效子字符串数量的方法,该字符串将只有 0 和 1,形成的子字符串的长度仅为偶数。
有效子字符串场景:
子串只有连续的0和1才有效
示例输入:
假设我们有一个字符串 00110,我们从中得到的子字符串是 00,01,11,10,0011,0110(只有偶数长度的奇数长度的子字符串不像 001,011,110 那样有效)只有这些子字符串字符串有效 01,10,0011 有连续的 0 和 1
所以上面例子的输出是3。
条件:
输入字符串长度将低于5<n<10^5
我一直在验证子字符串,尝试了几种不同的方法但没有成功,如果问题需要更多说明,请告诉我。
代码:
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;
}
【问题讨论】:
-
嗯,第一个测试是检查它们是否是偶数长度......
substr.Length % 2 == 0 -
你试过什么?就目前而言,您只希望我们为您编写一个递归方法
-
“连续的 0 和 1”是什么意思?为什么
0110无效? -
我是否正确地假设你的意思是连续的,你的意思是一旦它改变(从 0 到 1,或 1 到 0)然后它不能再变回来?
-
考虑输入
00100。从左到右,有效的子字符串是00、01、10和00。但是00出现了两次。那么这里的正确答案是 3 还是 4?
标签: c# string validation dynamic-programming