【问题标题】:string array to anagram string array字符串数组到字谜字符串数组
【发布时间】:2014-10-24 11:30:28
【问题描述】:
   public static List<ArrayList> areAnagrams(string[] input)
    {
        List<ArrayList> anagramList = new List<ArrayList>();
        List<string> str = input.ToList();
        for (int i = 0; i < input.Length; i++)
        {
            input[i] = input[i].ToLower();
            input[i] = input[i].Replace(" ", "");
        }
        for (int i = 0; i < input.Length; i++)
        {
            ArrayList list = new ArrayList();
            list.Add(input[i]);

            char[] string1 = input[i].ToCharArray();
            Array.Sort(string1);               

            for (int j = i + 1; j < input.Length; j++)
            {
                char[] string2 = input[j].ToCharArray();
                Array.Sort(string2);

                if (string1.Length == string2.Length)
                {
                    bool isAnagram = true;

                    for (int k = 0; k < string1.Length; k++)
                    {
                        if (string1[k] != string2[k])
                        {
                            isAnagram = false;
                            break;
                        }
                    }

                    if (isAnagram)
                    {
                        list.Add(input[j]);
                        //input[i].Remove(i);
                    }
                }
            }

            anagramList.Add(list);
        }

        return anagramList;
    }

string[] str = new string[] { "pear", "dirty room", "amleth", "reap", "tinsel", "hamlet", "dormitory", "listen", "silent" }

结果应该是:

[ {"pear","reap"}, {"dirty room","dormitory"}, {"amleth","hamlet"}, {"tinsel","listen","silent"} ]

问题是我无法删除已经插入列表中的单词

【问题讨论】:

    标签: c# arrays string arraylist


    【解决方案1】:

    我知道这不是你期望的答案,只是为了展示一种不同的方式

    string[] input = new string[] { "pear", "dirty room", "amleth", "reap", "tinsel", "hamlet", "dormitory", "listen", "silent" };
    
    var anagramList = input
           .Select(s => new { org = s, sorted = String.Join("", s.Where(c => c != ' ').OrderBy(c => c)) })
           .GroupBy(x => x.sorted)
           .Select(g => g.Select(x => x.org).ToList())
           .ToList();
    

    【讨论】:

      【解决方案2】:

      创建List&lt;string&gt; toRemove = new List&lt;string&gt;();而不是“立即删除”

      然后将要删除的项目添加到其中,完成后,只需创建简单的 for-cycle:

      foreach (string item in toRemove){
        input.delete(item);
      }
      

      (我大部分时间都在使用 Java,所以这个语法可能不是 100% 正确,但它是关于“如何做”)

      【讨论】:

        猜你喜欢
        • 2021-09-16
        • 2011-11-30
        • 2013-04-15
        • 2015-04-16
        • 2012-01-22
        • 1970-01-01
        • 2011-12-09
        • 2021-02-14
        • 2014-11-12
        相关资源
        最近更新 更多