Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểm tra chuỗi b có được bằng xoay chuỗi a 2 vị trí không C++


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