×

Phương pháp kiểm tra anagram trong C# và cách thực hiện đơn giản

Để kiểm tra xem hai chuỗi có phải là anagram của nhau hay không trong C#, bạn có thể sử dụng một trong các phương pháp sau đây:

Cách 1: Sử dụng sắp xếp

Trong phương pháp này, chúng ta sẽ sắp xếp cả hai chuỗi và so sánh chúng. Nếu hai chuỗi sau khi sắp xếp giống nhau, chúng là anagram của nhau.

using System;

class Program
{
    static bool AreAnagrams(string s1, string s2)
    {
        // Loại bỏ khoảng trắng và chuyển sang chữ thường
        s1 = new string(s1.ToLower().ToCharArray());
        s2 = new string(s2.ToLower().ToCharArray());

        // Chuyển các chuỗi thành mảng ký tự
        char[] arr1 = s1.ToCharArray();
        char[] arr2 = s2.ToCharArray();

        // Sắp xếp các mảng ký tự
        Array.Sort(arr1);
        Array.Sort(arr2);

        // So sánh các mảng ký tự
        return new string(arr1) == new string(arr2);
    }

    static void Main()
    {
        Console.WriteLine("Nhập vào chuỗi thứ nhất: ");
        string str1 = Console.ReadLine();
        Console.WriteLine("Nhập vào chuỗi thứ hai: ");
        string str2 = Console.ReadLine();

        if (AreAnagrams(str1, str2))
        {
            Console.WriteLine($"'{str1}' và '{str2}' là anagram của nhau.");
        }
        else
        {
            Console.WriteLine($"'{str1}' và '{str2}' không phải là anagram của nhau.");
        }
    }
}

Cách 2: Sử dụng đếm ký tự

Trong phương pháp này, chúng ta sẽ đếm số lượng mỗi ký tự trong hai chuỗi và so sánh chúng.

using System;

class Program
{
    static bool AreAnagrams(string s1, string s2)
    {
        // Loại bỏ khoảng trắng và chuyển sang chữ thường
        s1 = new string(s1.ToLower().ToCharArray());
        s2 = new string(s2.ToLower().ToCharArray());

        // Chuyển các chuỗi thành mảng ký tự
        char[] arr1 = s1.ToCharArray();
        char[] arr2 = s2.ToCharArray();

        // Sắp xếp các mảng ký tự
        Array.Sort(arr1);
        Array.Sort(arr2);

        // So sánh các mảng ký tự
        return new string(arr1) == new string(arr2);
    }

    static void Main()
    {
        Console.WriteLine("Nhập vào chuỗi thứ nhất: ");
        string str1 = Console.ReadLine();
        Console.WriteLine("Nhập vào chuỗi thứ hai: ");
        string str2 = Console.ReadLine();

        if (AreAnagrams(str1, str2))
        {
            Console.WriteLine($"'{str1}' và '{str2}' là anagram của nhau.");
        }
        else
        {
            Console.WriteLine($"'{str1}' và '{str2}' không phải là anagram của nhau.");
        }
    }
}

Giải thích chi tiết:

  1. Cách 1: Sử dụng sắp xếp:

    • Chuyển cả hai chuỗi về chữ thường và loại bỏ khoảng trắng.
    • Chuyển đổi các chuỗi thành mảng ký tự.
    • Sắp xếp các mảng ký tự.
    • So sánh các mảng ký tự đã sắp xếp.
  2. Cách 2: Sử dụng đếm ký tự:

    • Chuyển cả hai chuỗi về chữ thường và loại bỏ khoảng trắng.
    • Nếu độ dài của hai chuỗi khác nhau, chúng không thể là anagram.
    • Sử dụng một mảng đếm ký tự (giả sử ASCII) để đếm số lượng ký tự trong cả hai chuỗi.
    • Kiểm tra xem tất cả các giá trị trong mảng đếm đều là 0.

Cả hai phương pháp đều hiệu quả để kiểm tra xem hai chuỗi có phải là anagram của nhau hay không. Bạn có thể chọn phương pháp phù hợp với nhu cầu và phong cách lập trình của mình.

Comments