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

C# 多維陣列找出重複子字串:Dictionary 計數與 KMP 演算法兩種思路

     編輯:程式設計綜合問答

題目理解

輸入字串陣列或長字串,找出出現次數 > 1 的子字串(長度 ≥ 2)。

方案一:Dictionary 計數(適用離散字串陣列)

var input = "abc,a,bc,ba,ab,ca,a,c,cb,bc,abc".Split(',');
var dict = new Dictionary();
foreach (var s in input) {
    if (s.Length >= 2) {
        dict[s] = dict.GetValueOrDefault(s, 0) + 1;
    }
}
var duplicates = dict.Where(kv => kv.Value > 1).Select(kv => kv.Key);
foreach (var s in duplicates) Console.WriteLine(s);

方案二:KMP / 後綴陣列(適用單一長字串找重複子串)


// 簡化:雙重迴圈 + HashSet(O(n²) 空間換時間)
string text = "jASHDYG8USAFAKSJDNaasjfhis";
var seen = new HashSet();
var repeated = new HashSet();
for (int len = 2; len <= text.Length; len++) {
    for (int i = 0; i + len <= text.Length; i++) {
        string sub = text.Substring(i, len);
        if (!seen.Add(sub)) repeated.Add(sub);
    }
}
foreach (var s in repeated) Console.WriteLine(s);

C# Dictionary 官方文件

Dictionary 類別完整用法

總結

若輸入為字串陣列,Dictionary 計數最簡潔;若為單一長字串尋找所有重複子串,需用後綴自動機/後綴陣列(O(n))或雜湊+雙重迴圈(O(n²))權衡效能與複雜度。

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