比较字符串的不同组合

时间:2018-09-22 18:58:27

标签: c#

我有一本字典,其键值对如下所示

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) ;
}

5 个答案:

答案 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)

对每个字符串中的字符进行排序,任何两个具有相同字符的字符串将具有相同的排序版本。将结果粘贴到以分类版本为键的“字典”中。