Để 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:
-
Cách 1: Sử dụng hai con trỏ:
- Sử dụng hai biến
left
vàright
để 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.
- Sử dụng hai biến
-
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.
-
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