publicbooleancanTransform(String start, String end) { intn= start.length(); inti=0, j = 0; while (i < n && j < n) { while (i < n && start.charAt(i) == 'X') i++; while (j < n && end.charAt(j) == 'X') j++; if (i < n && j < n) { if (start.charAt(i) != end.charAt(j)) returnfalse; // XL -> LX if (start.charAt(i) == 'L' && i < j) returnfalse; // RX -> XR if (start.charAt(i) == 'R' && i > j) returnfalse; i++; j++; } } while (i < n) if (start.charAt(i++) != 'X') returnfalse; while (j < n) if (end.charAt(j++) != 'X') returnfalse; returntrue; }
时间复杂度:O(n)
空间复杂度:O(1)
双指针(精简)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
publicbooleancanTransform(String start, String end) { intn= start.length(); inti=0, j = 0; while (i < n || j < n) { while (i < n && start.charAt(i) == 'X') i++; while (j < n && end.charAt(j) == 'X') j++; // 注意 while 循环的条件是 i < n || j < n, 是或(||)而不是与(&&) if (i == n || j == n) returni== j; if (start.charAt(i) != end.charAt(j)) returnfalse; if (start.charAt(i) == 'L' && i < j) returnfalse; if (start.charAt(i) == 'R' && i > j) returnfalse; i++; j++; } returntrue; }