Palindrome: Đọc xuôi ngược giống nhau (bỏ qua case). Ví dụ: "Level".
Thuật toán
- Chuyển thành char array
- Reverse array
- Tạo string mới từ reversed array
- So sánh với original (IgnoreCase)
string str = "Level"; char[] ch = str.ToCharArray(); Array.Reverse(ch); string rev = new string(ch); bool isPalindrome = str.Equals(rev, StringComparison.OrdinalIgnoreCase);
Ví dụ hoàn chỉnh
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
string str = "Level";
char[] ch = str.ToCharArray();
Array.Reverse(ch);
string rev = new string(ch);
bool res = str.Equals(rev, StringComparison.OrdinalIgnoreCase);
if (res)
Console.WriteLine($"Chuỗi '{str}' là Palindrome!");
else
Console.WriteLine($"Chuỗi '{str}' không phải Palindrome!");
Console.Read();
}
}
}
Kết quả
Chuỗi 'Level' là Palindrome!
Cách khác:
- LINQ:
str.SequenceEqual(str.Reverse())(cần ToLower) - Two pointers: so sánh đầu/cuối, O(1) space
new string(str.Reverse().ToArray())
Mở rộng: Bỏ qua khoảng trắng, dấu câu: string clean = new string(str.Where(char.IsLetterOrDigit).ToArray()).ToLower();