我正在尝试解决以下问题,但找不到合适的解决方案。有任何想法吗?
谢谢。

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

任务-检查(从左到右)每个数字(忽略重复)没有出现在以下2个索引中。使用例如。上面的第一个数字=5。忽略重复项,我们看到组中5的最后一个索引是2。因此我们检查了下2个索引,即3和4不应包含5。如果确实如此,则将其视为错误。目标是计算字符串中的此类错误。

在上面的字符串错误是在索引3,10和16。

最佳答案

除了其他出色的解决方案之外,您还可以使用简单的regexp:

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


返回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

10-08 08:50
查看更多