Sử dụng HashSet<char> để loại bỏ ký tự trùng lặp trong chuỗi. HashSet chỉ lưu giá trị duy nhất, tự động loại bỏ duplicate khi khởi tạo từ chuỗi.
Ví dụ cơ bản
string myStr = "kkllmmnnoo";
var unique = new HashSet(myStr);
// unique chứa: 'k', 'l', 'm', 'n', 'o'
Mã nguồn hoàn chỉnh
using System;
using System.Linq;
using System.Collections.Generic;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
string myStr = "kkllmmnnoo";
Console.WriteLine("Chuỗi gốc: " + myStr);
var unique = new HashSet(myStr);
Console.Write("Chuỗi mới sau khi xóa trùng: ");
foreach (char c in unique)
Console.Write(c);
}
}
}
Kết quả
Chuỗi gốc: kkllmmnnoo
Chuỗi mới sau khi xóa trùng: klmno
Lưu ý: Thứ tự không được bảo toàn
HashSet không đảm bảo thứ tự. Nếu cần giữ thứ tự xuất hiện đầu tiên:
// Cách 1: LINQ Distinct (giữ thứ tự)
string result = string.Concat(myStr.Distinct()); // "klmno"
// Cách 2: Loop thủ công + HashSet (tùy chỉnh)
var seen = new HashSet();
var sb = new StringBuilder();
foreach (char c in myStr)
{
if (seen.Add(c)) // Add trả về true nếu chưa có
sb.Append(c);
}
string result = sb.ToString();
So sánh
| Cách | Thứ tự | Hiệu suất | Độ phức tạp |
|---|---|---|---|
new HashSet | Không bảo toàn | O(n) | Đơn giản nhất |
str.Distinct() | Bảo toàn | O(n) | LINQ, ngắn gọn |
| Loop + HashSet | Bảo toàn | O(n) | Kiểm soát hoàn toàn |
Mở rộng: Xóa từ trùng lặp trong câu
string sentence = "the quick brown fox jumps over the lazy dog the";
var words = sentence.Split(' ');
var uniqueWords = string.Join(" ", words.Distinct());
// "the quick brown fox jumps over lazy dog"