輸入字串陣列或長字串,找出出現次數 > 1 的子字串(長度 ≥ 2)。
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);
// 簡化:雙重迴圈 + 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);
若輸入為字串陣列,Dictionary 計數最簡潔;若為單一長字串尋找所有重複子串,需用後綴自動機/後綴陣列(O(n))或雜湊+雙重迴圈(O(n²))權衡效能與複雜度。