LeetCode 777 题解

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

猜你喜欢

转载自blog.csdn.net/u011439455/article/details/80511696
777