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

Kiểm tra chuỗi có được xoay 2 vị trí từ chuỗi khác không trong Java

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ụ

Input: a = "google", b = "legoog" → True (xoay trái 2: "go" → cuối → "oglego"? Wait: "google" xoay trái 2: bỏ 2 ký tự đầu "go" đưa ra cuối → "oglego"? Không, ví dụ gốc nói "legoog". Kiểm tra: "google" → xoay trái 2: "oglego". Xoay phải 2: "legoog". Đúng, "legoog" là xoay phải 2).

Input: a = "tuorialst", b = "tutorials" → False.

Ý tưởng

  • Nếu độ dài khác nhau → False.
  • Nếu độ dài ≤ 2 → True (xoay 2 vị trí trên chuỗi ≤2 ký tự trả về chuỗi gốc).
  • Xoay trái 2: b.substring(2) + b.substring(0, 2).
  • Xoay phải 2: b.substring(len-2) + b.substring(0, len-2).
  • Kiểm tra xem a có bằng một trong hai kết quả trên không.

Triển khai Java (đã sửa lỗi logic code gốc)

public class RotateStringCheck {
    public static boolean isRotatedByTwo(String a, String b) {
        if (a.length() != b.length()) return false;
        int len = a.length();
        if (len <= 2) return true; // xoay 2 trên chuỗi ≤2 giữ nguyên

        // Xoay trái 2: bỏ 2 ký tự đầu đưa ra cuối
        String leftRot = b.substring(2) + b.substring(0, 2);
        // Xoay phải 2: lấy 2 ký tự cuối đưa ra đầu
        String rightRot = b.substring(len - 2) + b.substring(0, len - 2);

        return a.equals(leftRot) || a.equals(rightRot);
    }

    public static void main(String[] args) {
        System.out.println(isRotatedByTwo("google", "legoog")); // true (xoay phải 2)
        System.out.println(isRotatedByTwo("google", "oglego")); // true (xoay trái 2)
        System.out.println(isRotatedByTwo("tuorialst", "tutorials")); // false
    }
}

Lưu ý sửa lỗi code gốc

Code gốc có lỗi: s2 = str2.substring(0,2) + str2.substring(0,2) (lặp 2 lần prefix) thay vì str2.substring(len-2) + str2.substring(0, len-2). Bản sửa trên đã khắc phục.

Phân tích

  • Thời gian: O(n) do substring và equals.
  • Không gian: O(n) tạo chuỗi mới.
  • Có thể tối ưu O(1) space bằng cách so sánh ký tự trực tiếp mà không tạo chuỗi con.