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

Kiểm tra chuỗi xoay vòng trong C++


Giả sử chúng ta có hai chuỗi s và t. Chúng ta cần kiểm tra xem s có phải là chuỗi xoay vòng của t hay không, nói cách khác, có thể lấy được t sau khi xoay vòng s không?

Ví dụ, nếu đầu vào là s = "helloworld" và t = "worldhello", thì kết quả sẽ là True.

Để giải quyết bài toán này, ta thực hiện các bước sau:

  • Nếu độ dài của s0 không bằng độ dài của s1, trả về false.
  • Gán s := s0 + s0 (nối s0 với chính nó).
  • Trả về true nếu s1 là chuỗi con của s, ngược lại trả về 0.

Ví dụ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool solve(string s0, string s1) {
        if (s0.size() != s1.size())
            return false;
        string s = s0 + s0;
        return s.find(s1) != string::npos;
    }
};

int main() {
    Solution ob;
    cout << (ob.solve("helloworld", "worldhello"));
}

Đầu vào

"helloworld", "worldhello"

Đầu ra

1