一个规则匹配的问题,求个思路,
IList<string> _products = new List<string>();
_products.Add("BBBBBB");
_products.Add("AAAAAA");
_products.Add("AAAAAA");
_products.Add("BBBBBB");
_products.Add("CCCCCCC");
_products.Add("CCCCCCC");
_products.Add("BBBBBB");
_products.Add("BBBBBB");
_products.Add("DDDDDD");
_products.Add("DDDDDD");
_products.Add("AAAAAA");
IList<string> _rules = new List<string>();
_rules.Add("AAAAAA");
_rules.Add("BBBBBB");
_rules.Add("CCCCCCC");
//_products 产品
//_rules 规则
//找到批配规则组合的所有产品 组合
//规则中产品可以重复 想得到 这产品有多少组符合规则的
比如以上的 答案 就是 2
求个思路,用哪种比较好?KMP么? 还是 KMP --------------------编程问答-------------------- 可以先放到一个dictioanry去,比如
"AAAAAA" : 3
"BBBBBB" : 4
"DDDDDD" : 2
"CCCCCCC" : 2
这个就是类似货架,有货物名称和对应库存数量。
你的问题就变成了,给定一个组合,可以出库几组。
每出一组,A、B、C就各减一,直到任何一种货品没有库存为止。 --------------------编程问答-------------------- 答案为何是2? --------------------编程问答-------------------- 用正则呗 . --------------------编程问答-------------------- 是啊,我也关心你的答案为啥是2呢?有啥必然性呢 --------------------编程问答-------------------- 难道是匹配到的相同的数量? 那么直接Linq就可以啦。 --------------------编程问答--------------------
就是水桶的水量 取决于最低的木板
因为CCCCCCC这个产品只出现2次,所以 就是2
这个可以这样
--------------------编程问答--------------------
IList<string> _products = new List<string>();
_products.Add("BBBBBB"); _products.Add("AAAAAA");
_products.Add("AAAAAA"); _products.Add("BBBBBB");
_products.Add("CCCCCCC"); _products.Add("CCCCCCC");
_products.Add("BBBBBB"); _products.Add("BBBBBB");
_products.Add("DDDDDD"); _products.Add("DDDDDD"); _products.Add("AAAAAA");
IList<string> _rules = new List<string>(); _rules.Add("AAAAAA");
_rules.Add("BBBBBB"); _rules.Add("CCCCCCC");
List<int> list = new List<int>();
foreach (var item in _rules)
{
int j = _products.Aggregate(0, (s, c) => s + (c == item ? 1 : 0));
list.Add(j);
}
Console.WriteLine(list.Min());
Console.ReadKey();
var result=_products.Where(x=>_rules.Contains(x)).GroupBy(x=>x).Min(g=>g.Count());--------------------编程问答-------------------- 此为仁兄所言极是
如果
规则为
IList<string> _rules = new List<string>();
//_rules.Add("AAAAAA");
//_rules.Add("AAAAAA");
//_rules.Add("CCCCCCC");
/// 如果 _products 不变
//那么结果 为 1
那么 上面的
--------------------编程问答-------------------- 除 --------------------编程问答--------------------
IList<string> _products = new List<string>();
_products.Add("BBBBBB"); _products.Add("AAAAAA");
_products.Add("AAAAAA"); _products.Add("BBBBBB");
_products.Add("CCCCCCC"); _products.Add("CCCCCCC");
_products.Add("BBBBBB"); _products.Add("BBBBBB");
_products.Add("DDDDDD"); _products.Add("DDDDDD"); _products.Add("AAAAAA");
IList<string> _rules = new List<string>(); _rules.Add("AAAAAA");
_rules.Add("AAAAAA"); _rules.Add("CCCCCCC");
List<int> list = new List<int>();
foreach (var item in _rules)
{
int mul= _products.Count(o=>o==item);//只需要加个重复的次数就可以了
int j = _products.Aggregate(0, (s, c) => s + (c == item ? 1 : 0));
list.Add(j/mul);//在这里对重复次数做处理
}
Console.WriteLine(list.Min());
Console.ReadKey();
--------------------编程问答--------------------
--------------------编程问答-------------------- 直接Linq --------------------编程问答-------------------- 2的话 是不是有组
//楼上的写错了,应该是规则的重复次数
int mul=_rules.Count(o=>o==item);//只需要加个重复的次数就可以了
AAAAAA,BBBBBB,CCCCCCC
补充:.NET技术 , C#