Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Xóa ký tự trùng lặp khỏi chuỗi trong C#

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áchThứ tựHiệu suấtĐộ phức tạp
new HashSet(str)Không bảo toànO(n)Đơn giản nhất
str.Distinct()Bảo toànO(n)LINQ, ngắn gọn
Loop + HashSetBảo toànO(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"