×

3 cách kiểm tra palindrome trong C# Hướng dẫn chi tiết và mã nguồn

 

Để kiểm tra xem một chuỗi có phải là palindrome hay không trong C#, bạn có thể sử dụng một số phương pháp khác nhau. Một chuỗi là palindrome nếu nó đọc xuôi và đọc ngược đều giống nhau. Dưới đây là một số cách để thực hiện điều này:

Cách 1: Sử dụng hai con trỏ

Trong phương pháp này, chúng ta sẽ sử dụng hai con trỏ để so sánh các ký tự từ đầu và cuối chuỗi.

using System;

class Program
{
    static bool IsPalindrome(string s)
    {
        int left = 0;
        int right = s.Length - 1;

        while (left < right)
        {
            // Bỏ qua các ký tự không phải chữ cái và số
            while (left < right && !char.IsLetterOrDigit(s[left]))
                left++;
            while (left < right && !char.IsLetterOrDigit(s[right]))
                right--;

            // So sánh các ký tự
            if (char.ToLower(s[left]) != char.ToLower(s[right]))
                return false;

            left++;
            right--;
        }

        return true;
    }

    static void Main()
    {
        Console.WriteLine("Nhập vào chuỗi: ");
        string input = Console.ReadLine();

        if (IsPalindrome(input))
        {
            Console.WriteLine($"'{input}' là palindrome.");
        }
        else
        {
            Console.WriteLine($"'{input}' không phải là palindrome.");
        }
    }
}

Cách 2: Sử dụng reverse và so sánh

Trong phương pháp này, chúng ta sẽ đảo ngược chuỗi và so sánh nó với chuỗi gốc.

using System;

class Program
{
    static bool IsPalindrome(string s)
    {
        // Chỉ giữ lại các ký tự chữ cái và số
        char[] arr = s.ToLower().ToCharArray();
        string filteredString = "";
        foreach (char c in arr)
        {
            if (char.IsLetterOrDigit(c))
                filteredString += c;
        }

        // Đảo ngược chuỗi
        char[] reversedArr = filteredString.ToCharArray();
        Array.Reverse(reversedArr);
        string reversedString = new string(reversedArr);

        // So sánh chuỗi gốc và chuỗi đảo ngược
        return filteredString == reversedString;
    }

    static void Main()
    {
        Console.WriteLine("Nhập vào chuỗi: ");
        string input = Console.ReadLine();

        if (IsPalindrome(input))
        {
            Console.WriteLine($"'{input}' là palindrome.");
        }
        else
        {
            Console.WriteLine($"'{input}' không phải là palindrome.");
        }
    }
}

Cách 3: Sử dụng Linq

Sử dụng Linq để kiểm tra palindrome một cách ngắn gọn hơn.

using System;
using System.Linq;

class Program
{
    static bool IsPalindrome(string s)
    {
        var filteredString = new string(s.Where(char.IsLetterOrDigit).ToArray()).ToLower();
        var reversedString = new string(filteredString.Reverse().ToArray());
        return filteredString == reversedString;
    }

    static void Main()
    {
        Console.WriteLine("Nhập vào chuỗi: ");
        string input = Console.ReadLine();

        if (IsPalindrome(input))
        {
            Console.WriteLine($"'{input}' là palindrome.");
        }
        else
        {
            Console.WriteLine($"'{input}' không phải là palindrome.");
        }
    }
}

Giải thích chi tiết:

  1. Cách 1: Sử dụng hai con trỏ:

    • Sử dụng hai biến leftright để duyệt chuỗi từ hai đầu.
    • Bỏ qua các ký tự không phải là chữ cái và số.
    • So sánh các ký tự đối xứng từ đầu và cuối chuỗi.
  2. Cách 2: Sử dụng reverse và so sánh:

    • Lọc bỏ các ký tự không phải chữ cái và số.
    • Đảo ngược chuỗi đã lọc và so sánh với chuỗi gốc.
  3. Cách 3: Sử dụng Linq:

    • Sử dụng Linq để lọc và đảo ngược chuỗi một cách ngắn gọn.

Các phương pháp trên giúp bạn kiểm tra xem một chuỗi có phải là palindrome hay không trong C#. 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