我有一本字典,其键值对如下所示
dict("A-B-C", "This is abc");
dict("X-Y-Z", "This is xyz");
so on
现在,当我收到输入时,说出类似“ BAC”之类的内容,系统应该聪明地知道其“ ABC”,或者其“ ZYX”应映射为“ XYZ”,一种方法是将所有组合放入字典中,例如说dict(“ BAC”,“ ABC”),但这可能会带来更多的可维护性,只是考虑.NET框架中是否有任何内容可以更轻松地解决此问题。
有没有一种简单的方法可以比较下面的字符串
A string either A-B or B-A is equal to A-B
A string either A-B-C or B-C-A or A-C-B or C-A-B or C-B-A equals to A-B-C
likewise a different combinations of A-B-C-D should equals to A-B-C-D
so as A-B-C-D-E
so on
上例中的A B C D E是两个字母的非数字单词。就像是
Su-Ma-Ju-Ve
更新 现在,我用下面的代码解决了这个问题,该代码按我维护的字典中识别的顺序返回字符串标记,不知道这是否是最好的方法,但目前正在解决问题
string sortPls(string pls)
{
Dictionary<string, int> dctPls = new Dictionary<string, int>();
dctPls["Su"] = 1;
dctPls["Mo"] = 2;
dctPls["Ju"] = 3;
dctPls["Me"] = 4;
dctPls["Ve"] = 5;
dctPls["Ma"] = 6;
dctPls["Sa"] = 7;
string[] arrPls = pls.Split('-');
int j = 0;
string sortPls = string.Empty;
for(int i = 0; i < arrPls.Length; i++)
{
for (j = i + 1; j < arrPls.Length; j++)
{
if (dctPls[arrPls[j]] < dctPls[arrPls[i]])
{
string tmp = arrPls[i];
arrPls[i] = arrPls[j];
arrPls[j] = tmp;
}
}
}
for (int k = 0; k < arrPls.Length; k++)
sortPls += arrPls[k] + "-";
return sortPls.Remove(sortPls.Length - 1) ;
}
答案 0 :(得分:4)
是的。如果要寻找集合相等性,HashSet<T>
会为您提供工具。
"ABBA".ToHashSet().SetEquals("BA")
否则,对于“ anagram”类型比较,对字符进行排序并比较序列:
"CDAB".OrderBy(x=>x).SequenceEqual("DCBA".OrderBy(x=>x))
答案 1 :(得分:1)
将字符串拆分为单个字母,将字母添加到Set中,然后使用其Equals方法比较这些集
答案 2 :(得分:1)
void Main()
{
string check = "CADB";
string equalTo = new string(check.ToCharArray().OrderBy(x => x).ToArray());
Console.WriteLine(equalTo);
}
只是做到这一点的一种方式。
答案 3 :(得分:1)
我认为,这将是最快的方法:
static <T extends Word> void say_all (java.util.LinkedList<T> list){
for(T w:list){
w.say();
}
}
答案 4 :(得分:0)
对每个字符串中的字符进行排序,任何两个具有相同字符的字符串将具有相同的排序版本。将结果粘贴到以分类版本为键的“字典”中。