Kiểm tra một chuỗi có phải là đối xứng (palindrome) hay không là một bài toán thường gặp trong lập trình. Một chuỗi được gọi là đối xứng nếu khi đọc từ trái sang phải và từ phải sang trái đều giống nhau. Dưới đây là cách triển khai để kiểm tra một chuỗi có phải là đối xứng hay không trong C#.
Phương Pháp 1: So Sánh Ký Tự
Một cách đơn giản để kiểm tra là so sánh các ký tự ở đầu và cuối của chuỗi, sau đó tiến dần vào giữa. Nếu tất cả các ký tự đối xứng đều giống nhau, thì chuỗi đó là palindrome.
using System;
class Program
{
static void Main()
{
string input = "madam";
bool isPalindrome = IsPalindrome(input);
Console.WriteLine($"Is the string \"{input}\" a palindrome? {isPalindrome}");
}
static bool IsPalindrome(string input)
{
int left = 0;
int right = input.Length - 1;
while (left < right)
{
if (input[left] != input[right])
{
return false;
}
left++;
right--;
}
return true;
}
}
Phương Pháp 2: Sử Dụng Chuỗi Đảo Ngược
Một cách khác để kiểm tra là đảo ngược chuỗi và so sánh nó với chuỗi ban đầu. Nếu chuỗi đảo ngược giống với chuỗi ban đầu, thì chuỗi đó là palindrome.
using System;
class Program
{
static void Main()
{
string input = "madam";
bool isPalindrome = IsPalindrome(input);
Console.WriteLine($"Is the string \"{input}\" a palindrome? {isPalindrome}");
}
static bool IsPalindrome(string input)
{
char[] charArray = input.ToCharArray();
Array.Reverse(charArray);
string reversed = new string(charArray);
return input.Equals(reversed, StringComparison.OrdinalIgnoreCase);
}
}
Phương Pháp 3: Sử Dụng LINQ
Bạn cũng có thể sử dụng LINQ để đảo ngược chuỗi và so sánh nó với chuỗi ban đầu.
using System;
using System.Linq;
class Program
{
static void Main()
{
string input = "madam";
bool isPalindrome = IsPalindrome(input);
Console.WriteLine($"Is the string \"{input}\" a palindrome? {isPalindrome}");
}
static bool IsPalindrome(string input)
{
string reversed = new string(input.Reverse().ToArray());
return input.Equals(reversed, StringComparison.OrdinalIgnoreCase);
}
}
Giải Thích Mã C#
-
Phương Pháp 1: So Sánh Ký Tự
- Ý Tưởng: Dùng hai con trỏ
left
vàright
để so sánh các ký tự ở đầu và cuối chuỗi. Nếu tất cả các cặp ký tự đối xứng đều giống nhau, thì chuỗi đó là palindrome. - Ưu Điểm: Không cần thêm bộ nhớ để lưu chuỗi đảo ngược.
- Nhược Điểm: Phải duyệt qua toàn bộ chuỗi bằng cách so sánh từng cặp ký tự.
- Ý Tưởng: Dùng hai con trỏ
-
Phương Pháp 2: Sử Dụng Chuỗi Đảo Ngược
- Ý Tưởng: Đảo ngược chuỗi và so sánh với chuỗi ban đầu.
- Ưu Điểm: Dễ hiểu và ngắn gọn.
- Nhược Điểm: Tốn bộ nhớ để lưu chuỗi đảo ngược.
-
Phương Pháp 3: Sử Dụng LINQ
- Ý Tưởng: Sử dụng LINQ để đảo ngược chuỗi và so sánh với chuỗi ban đầu.
- Ưu Điểm: Mã ngắn gọn và sử dụng các phương thức mạnh mẽ của LINQ.
- Nhược Điểm: Tương tự như phương pháp 2, tốn bộ nhớ để lưu chuỗi đảo ngược.
Kết Luận
Có nhiều cách để kiểm tra một chuỗi có phải là palindrome hay không trong C#. Việc lựa chọn phương pháp nào phụ thuộc vào yêu cầu cụ thể về hiệu năng và sự dễ hiểu của mã nguồn. Phương pháp so sánh ký tự là hiệu quả nhất về bộ nhớ, trong khi phương pháp sử dụng chuỗi đảo ngược và LINQ là dễ hiểu và ngắn gọn hơn.
Comments