2014-08-30 129 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

要命謝謝:) – Faisal 2014-08-30 19:11:22