大佬,牛!!!
- 题目:给你两个字符串start和end,然后看看能不能经过一定的变换以后,使得两个字符串相同。其变换就是将start的XL替换成LX,或者是将RX替换成XR。
- 我的思路:我每次都比对两个字符,如果相同就掉过。但是直到遇到了这个测试"XXXXXLXXXX"、“LXXXXXXXXX”,我才意识到我的思路是错的。但是也没想到其他的办法。
- 大佬的思路:其实这个题不是很难,但是这个规律比较难找。我当时做的时候就有点钻牛角尖了。然后看了一下大佬的解析,才发现,我的出发点就是错的。其实每次都让L往左移动,让R往右移动。因此需要满足的条件为:
- 只要保证L和R的相对顺序相同,以及每个元素的对应个数相同。
- 每个L在end中的下标小于等于对应的L在start中的下标,
- 每个R在end中的下标大于等于对应的R在start中的下标。
- 技巧:双指针
java代码
class Solution {
public boolean canTransform(String start, String end) {
int n = start.length();
int i = 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)) {
return false;
}
char c = start.charAt(i);
if ((c == 'L' && i < j) || (c == 'R' && i > j)) {
return false;
}
i++;
j++;
}
}
while (i < n) {
if (start.charAt(i) != 'X') {
return false;
}
i++;
}
while (j < n) {
if (end.charAt(j) != 'X') {
return false;
}
j++;
}
return true;
}
}
- 总结:题目挺有意思的,我一开始的思路就是偏离了。这里有三个条件,第一个是因为LR或者RL是不能换的,后面两个是要保证单方向的换。最后附上大佬的链接。