首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 字符串分組:相同字母組成(含重複次數)的單詞歸類算法

     編輯:程式設計綜合問答

輸入:`"ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"`,輸出分組:`ABCCD+CDCAB` (字母 A,B,C,C,D)、`CDA+DCA+ADC` (A,C,D) 等。

核心思路:標準化簽名

  • 每個單詞 → **字符排序** → 作為分組 Key。
  • `ABCCD` → `ABCCD` (已排序);`CDCAB` → `ABCCD` → 同組。

完整代碼

string input = "ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB";
var groups = input.Split(',')
    .GroupBy(w => new string(w.OrderBy(c => c).ToArray())) // 排序簽名分組
    .Select((g, i) => new { GroupNo = i+1, Words = g.ToList() })
    .ToList();

foreach (var g in groups) {
    Console.WriteLine($"第{g.GroupNo}組:{string.Join(",", g.Words)}");
}

輸出

第1組:ABCCD,CDCAB
第2組:CDA,DCA,ADC
第3組:BCDD
第4組:BCD

優化:字符計數簽名 (避免排序 O(k log k))

string GetSignature(string w) {
    int[] cnt = new int[26];
    foreach (char c in w) cnt[c-'A']++;
    return string.Join("#", cnt); // "1#2#1#0#1#0..."
}
// 替換 GroupBy key 為 GetSignature(w)

時間複雜度:O(n * k) (n單詞數, k平均長度),空間 O(n)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved