求帮忙写个算法,该如何解决
求帮忙写个算法
根据 1、长度相同为一组;2、起始几位字母相同为一组; 规则,得到缺失部分的数据。
如数据:【1000,1001,1002,1006,1009,abc10,abc11,abc12,abc15,abc123,abc124,abc127】
应得出的结果为:1003,1004,1005,1007,1008,abc13,abc14,abc125,abc126
------解决方案--------------------
试试看
根据 1、长度相同为一组;2、起始几位字母相同为一组; 规则,得到缺失部分的数据。
如数据:【1000,1001,1002,1006,1009,abc10,abc11,abc12,abc15,abc123,abc124,abc127】
应得出的结果为:1003,1004,1005,1007,1008,abc13,abc14,abc125,abc126
------解决方案--------------------
List<string> list = new List<string> { "1000", "1001", "1002", "1006", "1009", "abc10","abcd1", "abc11",
"abc12", "abc15", "abc123", "abc124","abcd5", "abc127" };
Function(list);
private void Function(List<string> list)
{
list.GroupBy(GroupData).ToList().ForEach(x =>
{
x.OrderBy(o => o).GroupBy(GroupData2).ToList().ForEach(y =>
{
IOrderedEnumerable<string> orders = y.OrderBy(o => o);
int min = Convert.ToInt32(Regex.Match(orders.First(), @"[\d]+").Value);
int max = Convert.ToInt32(Regex.Match(orders.Last(), @"[\d]+").Value);
IEnumerable<string> result = Enumerable.Range(min, max - min).Select(s =>
Regex.Replace(orders.First(), @"[\d]+", s.ToString())).Where(w => !orders.Contains(w));
MessageBox.Show(string.Join(";", result));
});
});
}
private int GroupData(string str)
{
return str.Length;
}
private string GroupData2(string str)
{
return Regex.Replace(str, @"[\d]+", string.Empty);
}
试试看