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; } }