在字符串内计数的巧妙解决方案

Ale*_*x67 1 c# string

我试图解决以下问题但无法找到一个优雅的解决方案.有任何想法吗?谢谢.

输入 - 可变长度的数字串,例如,字符串str ="5557476374202110373551116201";

任务 - 检查(从左到右)每个数字(忽略重复)不会出现在以下2个索引中.使用例如.上面,第一个数字= 5.忽略代表我们看到组中最后一个5的索引是2.所以我们检查接下来的2个索引,即3和4不应该有5.如果是,我们将其视为错误.目标是计算字符串中的此类错误.

在上面的字符串中,错误位于索引3,10和16处.

jsp*_*cal 5

除了其他优秀的解决方案,您还可以使用简单的正则表达式:

foreach (Match m in Regexp.Matches(str, @"(\d)(?!\1)(?=\d\1)"))
    Console.WriteLine("Error: " + m.Index);
Run Code Online (Sandbox Code Playgroud)

返回3,10,16.这将使用具有反向引用的前瞻匹配相邻错误.处理重复..net应该支持这一点.如果没有,您可以使用非反向引用版本:

(?<=0[^0])0|(?<=1[^1])1|(?<=2[^2])2|(?<=3[^3])3|(?<=4[^4])4|(?<=5[^5])5|(?<=6[^6])6|(?<=7[^7])7|(?<=8[^8])8|(?<=9[^9])9