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

Chương trình C# kiểm tra chuỗi đối xứng (Palindrome)

Chuỗi đối xứng (palindrome) đọc từ trái sang phải và từ phải sang trái giống nhau (bỏ qua chữ hoa/thường, khoảng trắng, dấu câu). Ví dụ: "Malayalam", "A man a plan a canal Panama".

Mã nguồn (cách cơ bản: đảo ngược so sánh)


using System;

namespace PalindromeCheck {
    class Program {
        static void Main(string[] args) {
            string input = "Malayalam";
            
            // Chuyển thành mảng char, đảo ngược, tạo chuỗi mới
            char[] chars = input.ToCharArray();
            Array.Reverse(chars);
            string reversed = new string(chars);
            
            // So sánh không phân biệt hoa/thường
            bool isPalindrome = input.Equals(reversed, StringComparison.OrdinalIgnoreCase);
            
            if (isPalindrome) {
                Console.WriteLine($"\"{input}\" là chuỗi đối xứng (Palindrome)!");
            } else {
                Console.WriteLine($"\"{input}\" KHÔNG phải chuỗi đối xứng.");
            }
            Console.Read();
        }
    }
}

Kết quả


"Malayalam" là chuỗi đối xứng (Palindrome)!)

Cách tối ưu: Hai con trỏ (Two Pointers) - O(1) space


static bool IsPalindrome(string s) {
    int left = 0, right = s.Length - 1;
    
    while (left < right) {
        // Bỏ qua ký tự không phải chữ/số
        while (left < right && !char.IsLetterOrDigit(s[left])) left++;
        while (left < right && !char.IsLetterOrDigit(s[right])) right--;
        
        if (char.ToLower(s[left]) != char.ToLower(s[right]))
            return false;
        
        left++;
        right--;
    }
    return true;
}

So sánh

Phương phápKhông gianXử lý space/punctuationUnicode
Đảo ngược + EqualsO(n)Không (so sánh nguyên chuỗi)Có (OrdinalIgnoreCase)
Two PointersO(1)Có (bỏ qua non-alnum)Có (char.ToLower)
LINQ Reverse + SequenceEqualO(n)Cần filter trướcCó

Lưu ý

  • Code gốc so sánh nguyên chuỗi — "A man a plan" sẽ KHÔNG được coi là palindrome do có space.
  • StringComparison.OrdinalIgnoreCase an toàn culture (tránh Turkish I problem).
  • Để kiểm tra số palindrome: n.ToString() rồi dùng logic trên.