Chuỗi (string) trong C# là bất biến (immutable) — không thể sửa đổi trực tiếp. Cách phổ biến: duyệt ngược và xây chuỗi mới, hoặc dùng LINQ/Array.Reverse.
Cách 1: Vòng lặp while (giải thuật cơ bản)
using System;
class Demo {
static void Main() {
string myStr = "Tom";
string rev = "";
Console.WriteLine("Chuỗi gốc: {0}", myStr);
int len = myStr.Length - 1;
while (len >= 0) {
rev = rev + myStr[len]; // Nối ký tự từ cuối về đầu
len--;
}
Console.WriteLine("Chuỗi đảo ngược: {0}", rev);
Console.ReadLine();
}
}
Kết quả
Chuỗi gốc: Tom
Chuỗi đảo ngược: moT
Cách 2: Dùng LINQ (ngắn gọn)
using System.Linq;
string str = "Tom";
string reversed = new string(str.Reverse().ToArray());
Console.WriteLine(reversed); // moT
Cách 3: Dùng Array.Reverse (hiệu năng tốt)
char[] chars = str.ToCharArray();
Array.Reverse(chars);
string reversed = new string(chars);
Cách 4: StringBuilder (hiệu năng tốt cho chuỗi dài/lặp nhiều)
using System.Text;
var sb = new StringBuilder();
for (int i = str.Length - 1; i >= 0; i--) {
sb.Append(str[i]);
}
string reversed = sb.ToString();
So sánh hiệu năng
| Phương pháp | Độ phức tạp | Cấp phát bộ nhớ | Khuyên dùng |
|---|---|---|---|
Vòng lặp + += | O(n²) | Nhiều (string bất biến) | Không (chỉ học tập) |
StringBuilder | O(n) | 1 lần | Chuỗi dài, lặp nhiều |
Array.Reverse | O(n) | 1 mảng char + 1 string | Chung dùng tốt |
LINQ Reverse() | O(n) | Nhiều đối tượng trung gian | Code ngắn, không quan trọng perf |
Lưu ý Unicode
Các cách trên đảo ngược theo char (UTF-16 code unit). Với emoji/ký tự surrogate pair (vd: "👨👩👧👦"), kết quả sẽ sai. Cần dùng StringInfo hoặc Rune (.NET Core 3.0+).