Sử dụng HashSet<char> để loại bỏ các ký tự trùng lặp trong chuỗi. HashSet chỉ lưu trữ các giá trị duy nhất, tự động loại bỏ trùng lặp khi khởi tạo từ chuỗi.
Ví dụ cơ bản
string str = "ppqqrr";
var uniqueChars = new HashSet(str);
// uniqueChars chứa: 'p', 'q', 'r'
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 str = "ppqqrr";
Console.WriteLine("Chuỗi gốc: " + str);
var res = new HashSet(str);
Console.Write("Chuỗi mới sau khi xóa trùng: ");
foreach (char c in res)
Console.Write(c);
}
}
}
Kết quả
Chuỗi gốc: ppqqrr
Chuỗi mới sau khi xóa trùng: pqr
Lưu ý về thứ tự
HashSet không bảo toàn thứ tự xuất hiện của ký tự. Nếu cần giữ thứ tự, dùng LINQ:
// Giữ thứ tự xuất hiện đầu tiên
string result = new string(str.Distinct().ToArray());
// Hoặc
string result = string.Concat(str.Distinct());
So sánh các cách
| 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 |
str.Distinct() | Bảo toàn | O(n) | LINQ |
| Loop thủ công + HashSet | Bảo toàn | O(n) | Kiểm soát hoàn toàn |
Ví dụ giữ thứ tự
string str = "ppqqrr";
string unique = string.Concat(str.Distinct());
Console.WriteLine(unique); // "pqr" (giữ thứ tự p→q→r)