62,254
社区成员
发帖
与我相关
我的任务
分享 private void button2_Click(object sender, EventArgs e)
{
string[] str1 = new string[] { "ab", "bc", "cd", "de", "ef", "fg", "gh", "hi", "il" };
Get(str1);
}
//总方法
private ArrayList Get(string[] str)
{
ArrayList al = new ArrayList();
ArrayList result = new ArrayList();
char[] c;
int xiabiao = 0;
int xiabiao1 = 0;
ArrayList shuzu;
for (int i = 0; i < str.Length; i++)
{
if (al.Count == 0)
{
al.Add(str[i]);
continue;
}
c = str[i].ToCharArray();
shuzu = new ArrayList();
for (int j = 0; j < al.Count; j++)
{
xiabiao = al[j].ToString().IndexOf(c[1]);
xiabiao1 = al[j].ToString().IndexOf(c[0]);
if (xiabiao == -1)
{
if (xiabiao1 == -1)
{
shuzu.Add(str[i]);
}
else if (xiabiao1 == al[j].ToString().Length - 1)
{
al[j] = al[j].ToString() + c[1];
}
else
{
shuzu[j] = al[j].ToString().Substring(0, xiabiao1 + 1) + c[1];
}
}
else if (xiabiao == 0)
{
if (al[j].ToString().IndexOf(c[0]) > -1)
{
MessageBox.Show("你输入的规则有冲突");
return null;
}
al[j] = c[0] + al[j].ToString();
}
else
{
if (xiabiao1 == -1)
{
shuzu.Add(c[0] + al[j].ToString().Substring(xiabiao, al[j].ToString().Length - xiabiao));
}
else if (xiabiao1 > xiabiao)
{
MessageBox.Show("你输入的规则有冲突");
return null;
}
}
}
shuzu = ArrClear(shuzu);
foreach (string s in shuzu)
{
al.Add(s);
}
al = ArrClear(al);//取到所有规则
}
al = ArrClear(al);
foreach (string s in al)
{
foreach (string s1 in Getall(s))
{
result.Add(s1);
}
}
result = ArrClearXT(result);
return result;
}
//清除ArrayList中的重复和被包含的选项
private ArrayList ArrClear(ArrayList al)
{
ArrayList xiabiao = new ArrayList();
for (int i = 0; i < al.Count; i++)
{
for (int j = i + 1; j < al.Count; j++)
{
if (al[i].ToString().IndexOf(al[j].ToString())>-1)
{
xiabiao.Add(j);
}
if (al[j].ToString().IndexOf(al[i].ToString()) > -1)
{
xiabiao.Add(i);
}
}
}
xiabiao = ArrClearXT(xiabiao);
for (int i = 0; i < xiabiao.Count; i++)
{
al.RemoveAt(Convert.ToInt32(xiabiao[i]));
}
return al;
}
//清楚ArrayList重复的选项
private ArrayList ArrClearXT(ArrayList al)
{
for (int i = 0; i < al.Count; i++)
{
for (int j = i + 1; j < al.Count; j++)
{
if (al[i].ToString().Equals(al[j].ToString()))
{
al.RemoveAt(j);
}
}
}
return al;
}
//获得该规则下的所有可能 借鉴别人的方法
private List<string> Getall(string s)
{
List<string> ss = new List<string>();
ss.Add(s);
int t = s.Length;
List<string> tempss = new List<string>();
List<string> tempss2 = new List<string>();
tempss2.AddRange(ss);
while (t > 2)
{
tempss.Clear();
tempss.AddRange(tempss2);
tempss2.Clear();
foreach (string subs in tempss)
{
for (int i = 0; i < subs.Length; i++)
{
string ts = subs.Remove(i, 1);
if (!tempss2.Contains(ts))
tempss2.Add(subs.Remove(i, 1));
}
}
t--;
ss.AddRange(tempss2);
}
return ss;
}
string[] str = {"AB","FA", "GF", "MF", "LM", "QM", "PF", "CD", "DE", "FAB","FB","FAC","FC"};
foreach (string s in str)
{
char[] ch = s.ToCharArray();
bool flag = true;
for (int i = 0; i < ch.Length-1; i++)
{
if ((int)ch[i] > (int)ch[i + 1])
{
flag = false;
break;
}
}
if (flag)
{
Response.Write(s + "<br/>");
}
