日期:2014-05-17  浏览次数:20702 次

版主说难度不大,我再加大难度重新写下说明,看看算法如何写?


//标签类

public Class BiaoqianCollection()
{

   public list<Biaoqian> lbq=new list<Biaoqian>(); 
}

public Class Biaoqian()
{
   public string bq=""; //主标签
   public list<string> lcontent=new list<string>(); //内容list


}

private List<string> ReplaceBiaoqian(string template,BiaoqianCollection bqcollection)
{

//算法实现


}

public void main()
{
BiaoqianCollection AllBq=new BiaoqianCollection();

Contents new1=new Contents();
new1.bq="A"
new1.lcontent.Add("我你他");
new1.lcontent.Add("甲乙丙");
.......
new1.lcontent.Add("偶倪她");
ALLBq.lbq.add(new1);


Contents new3=new Contents();
new2.bq="B"
new2.lcontent.Add("是");
new2.lcontent.Add("似");
.......
new3.lcontent.Add("乃");
ALLBq.lbq.add(new2);

Contents new3=new Contents();
new3.bq="C"
new3.lcontent.Add("夏商周");
new3.lcontent.Add("秦汉");
.......
new3.lcontent.Add("元明清");
ALLBq.lbq.add("new3");

Contents new4=new Contents();
new4.bq="D"
new4.lcontent.Add("朝");

ALLBq.lbq.add("new4");

Contents new5=new Contents();
new5.bq="E"
new5.lcontent.Add("人男女");

ALLBq.lbq.add("new4");

//下面是要实现的,
string _tmp=""//模版字符串
list<string> lresult=new list<string>();
lresult=ReplaceBiaoqian(string template,BiaoqianCollection bqcollection)
}


模版字符串,格式如下
string template="请注意,第一个人说{A1}{B1}{C2}{D1}{E1},他过来了。第二个人说他不是{C2}{D1}和{C1}{E2}"; //模版字符串是这样类型的。

A1 代表 ALLBq.lbq中bq="A"的BiaoQian,1代表这个Biaoqian中每一个lcontent的字符串的第一个字。 上述这个template经过ReplaceBiaoqian产生的lresult应该含有如下数量的字符串:bq="A"的有m个字符串,bq="B"的有n个字符串,bq="C"的有x个字符串bq="D"的有y个字符串bq="E"的有z个字符串那么就要生成的_result.count=m*n*x*d*e个字符串。
算法

------解决方案--------------------
其实你这个的根本就是如何解析出{}中的内容,正则 (?is)(?<=\{)[^\{\}]+(?=\})+,并且分离出字母和数字,有了他们,后面的事还算事吗,就剩下匹配了吧,linq或者遍历比对都可以
分离内容及分离字母和数字都可用正则

------解决方案--------------------
额,基本还是没啥难度,纯粹的机械代码。前半截纯粹的机械代码,正则也好,词法分析也罢。完全的不需要想的机械代码,后半截组合部分也是简单的笛卡尔积。

这题目如果你大一的基本编译原理,基本集合论没翘课的话,估计15分钟内能写出正常解出来
------解决方案--------------------
思路都有了,我建议你自己先动手试着写写

BTW: Biaoqian 用Tag来代替多好啊,中文拼音看着很尴尬