用字符串模拟ROL的运算结果代码如何实现?实现和思路

KLQ 2020-04-15 14:37:52 java常见问答 5607

你知道用字符串模拟移位指令循环左移(ROL)的运算结果的代码实现和思路吗?下面就给大家带来几种具体的实例。

题目:

一个给定的字符序列S,请你将其循环左移K位后的序列输出。

例:

字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。

思路1

代码实现:

class Solution
{
    public:
        string LeftRotateString(string str, int n)
        {
            int len = str.length();
            if (len == 0) return "";
            n = n % len;
            str += str;
            return str.substr(n, len);
        }
};

思路2

代码实现:

public class LeftRotateStringSolution
{
    public String LeftRotateString(String str, int n)
    {
        char[] chars = str.toCharArray();
        if (chars.length < n)
        {
            return "";
        }
        reverse(chars, 0, n - 1);
        reverse(chars, n, chars.length - 1);
        reverse(chars, 0, chars.length - 1);
        return new String(chars);
    }
    public void reverse(char[] chars, int start, int end)
    {
        while (start < end)
        {
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            start++;
            end--;
        }
    }
}

思路3:

假设字符串abcdef,n=3,设X=abc,Y=def,所以字符串可以表示成XY,如题干,问如何求得YX。

假设X的翻转为XT,XT=cba,同理YT=fed,那么YX=(XTYT)T,三次翻转后可得结果。

代码实现:

class Solution
{
    public:
        void fun(string & s, int start, int end)
        {
            char temp;
            while (start < end)
            {
                temp = s[start];
                s[start] = s[end];
                s[end] = temp;
                start++;
                end--;
            }
        }
    string LeftRotateString(string str, int n)
    {
        int len = str.length();
        if (0 == len || 0 == n)
            return str;
        string & temp = str;
        fun(temp, 0, n - 1);
        fun(temp, n, len - 1);
        fun(temp, 0, len - 1);
        return str;
    }
};

以上的3种代码实现方式和思路你都可以参考一下,希望可以对你有所帮助,更多相关Java实例,可以继续来本站了解。