【发布时间】:2019-02-02 03:53:33
【问题描述】:
我正在尝试构建一个函数来计算零之间的数量。 我的函数对于以一个开头和结尾的二进制文件来说做得很好。但问题是如果给定的二进制是 100000,它返回 5。但它应该返回零,因为它不在 1 之间。
这里是代码。
private static int solution1(int N)
{
string binary = Convert.ToString(N, 2);
int gap = 0;
int longestgap = 0;
foreach (char Z in binary)
{
if (Z == '0') gap++;
if (gap > longestgap) longestgap = gap;
if (Z == '1') gap = 0;
}
return longestgap;
}
【问题讨论】:
-
为了好玩,您可以去掉任何前导和尾随
0字符,然后将字符串按1拆分并计算最长的子字符串:int longestGap = Convert.ToString(N, 2).Trim('0').Split('1').Max(x => x.Length); -
我真的很讨厌引入正则表达式......但是如何对所需模式的匹配进行正则表达式然后最大化结果呢? - 忘了它。 @MatthewWatson 的方法更好。