2014-08-30 9 views
-2
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"} ]

Проблема в том, им не в состоянии удалить слова, которые уже вставлены в списке

ответ

0

Вместо «мгновенного удаления» просто создайте List<string> toRemove = new List<string>();

Затем добавьте в нее элементы, которые вы хотите удалить, и после того, как вы закончите, просто создать простой для цикла:

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

(Я использую Java большую часть времени, поэтому, возможно, этот синтаксис не 100% правильно, но речь идет о том, «как это сделать»)

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(); 
+0

Awsome спасибо :) – Faisal

Смежные вопросы