https://leetcode.com/problems/swap-adjacent-in-lr-string/description/
题目大意:给你两个串start和end,由X,L,R三个字符组成,XL 可以变成 LX,RX 可以变成XR,问能否将start变成end。
解题思路:从两种变换考虑 XL ->LX 意味着只要L左边是X那么L可以移动到左边任意的位置,同理RX->XR意味着R可以移动到右边任意位置。从左往右比较start ,如果i位置上的字符和end上不同 ,如果start上是R,end上是X那么就找到start上右边第一个X,贪心的交换;从右往左考虑不同位置上的L。
最后比较一下,start和end是否一样。
class Solution {
public boolean canTransform(String start, String end) {
int n = start.length();
int m =end.length();
if(n!=m) return false;
StringBuilder s =new StringBuilder(start);
StringBuilder e=new StringBuilder(end);
for(int i=0;i<n;i++)
{
if(s.charAt(i) == e.charAt(i)) continue;
else
{
if(s.charAt(i)=='R' && e.charAt(i)=='X')
{
for(int j=i+1;j<n;j++)
{
if(s.charAt(j)=='X')
{
char tmp = s.charAt(i);
s.setCharAt(i,s.charAt(j));
s.setCharAt(j,tmp);
break;
}
else if(s.charAt(j)=='L') break;
}
}
}
}
for(int i=n-1;i>=0;i--)
{
if(s.charAt(i)==e.charAt(i)) continue;
else
{
if(s.charAt(i)=='L' && e.charAt(i)=='X')
{
for(int j=i-1;j>=0;j--)
{
if(s.charAt(j)=='X')
{
char tmp = s.charAt(i);
s.setCharAt(i,s.charAt(j));
s.setCharAt(j,tmp);
}
else if(s.charAt(j)=='R') break;
}
}
}
}
System.out.println(s+" "+e);
for(int i=0;i<n;i++)
{
if(s.charAt(i)!=e.charAt(i)) return false;
}
return true;
}
}