Cho hai chuỗi a và b. Kiểm tra xem b có thể được tạo ra bằng cách xoay a **đúng 2 vị trí** theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ. Ví dụ:
Đầu vào 1: a="google", b="legoog" → True (xoay trái 2: "google" → "oglego" → "legoog"? Thực ra xoay trái 2: "google" -> "oglego" -> "legoog" đúng).
Đầu vào 2: a="tuorialst", b="tutorials" → False.
Phương pháp
- Nếu độ dài khác → false.
- Nếu độ dài ≤ 2 → so sánh trực tiếp.
- Xoay trái 2: lấy 2 ký tự cuối + phần còn lại. So sánh với a.
- Xoay phải 2: lấy từ ký tự thứ 3 đến hết + 2 ký tự đầu. So sánh với a.
- Nếu khớp một trong hai → true.
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
bool checkRotated(string a, string b) {
if (a.size() != b.size()) return false;
if (a.size() <= 2) return a == b;
// Xoay trái 2 (b xoay trái 2 so với a? Đề bài: b xoay 2 vị trí được a)
// Cách hiểu: b xoay trái 2 = b.substr(n-2) + b.substr(0,n-2)
string leftRot = b.substr(b.size()-2) + b.substr(0, b.size()-2);
if (leftRot == a) return true;
// Xoay phải 2
string rightRot = b.substr(2) + b.substr(0, 2);
if (rightRot == a) return true;
return false;
}
int main() {
string a = "google", b = "legoog";
cout << (checkRotated(a,b) ? "True" : "False");
return 0;
}
Kết quả
True