我在样本中有一个输入数字,我正在读取该数字,然后执行“看和说”序列。它正在工作,但是我想知道是否有更优雅的方法来做到这一点。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ArraryFunction("111115"));
}
private static string ArraryFunction(string input)
{
var charArray = input.ToCharArray();
int count = 0;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < charArray.Length; i++)
{
if (i == charArray.Length - 1)
{
if (charArray[i] == charArray[i - 1])
{
count++;
stringBuilder.Append(string.Concat(count, charArray[i]));
return stringBuilder.ToString();
}
stringBuilder.Append(string.Concat(1, charArray[i]));
return stringBuilder.ToString();
}
if (charArray[i] == charArray[i + 1])
{
// current character count ++
count++;
}
else
{
stringBuilder.Append(string.Concat(count + 1, charArray[i]));
count = 0;
}
}
return "";
}
}
您可以使用
Regex.Replace
来识别相同数字的块,并在回调中处理它们:
private static string ArraryFunction(string input)
{
return Regex.Replace(input, "(.)\\1*",
m => string.Concat(m.Value.Length, m.Value[0]));
}