左旋转字符串

本贴最后更新于 2498 天前,其中的信息可能已经斗转星移

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出。例如,字符序列 S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

解题思路

  • 如果可以用 substring(),直接用 substring();

  • 如果不可以,用字符数组替换移位。原理:YX = (X.T Y.T).T

代码

代码 1

public class Solution {
    public String LeftRotateString(String str,int n) {
        if (str == null || str.length() == 0)
            return "";
        int length = str.length();
        n = n % length;
        String right = str.substring(0, n);
        String left = str.substring(n, length);
        return left + right;
    }
}

代码 2

public class Solution {
    public String LeftRotateString(String str,int n) {
        if (str == null || str.length() == 0)
            return "";
        char[] cs = str.toCharArray();
        n %= cs.length;
        swap(cs, 0, n);
        swap(cs, n, cs.length);
        swap(cs, 0, cs.length);
        return String.valueOf(cs);
    }
    
    private void swap(char[] cs, int start, int end) {
        for (int i = start; i < (start+end)/2; i++) {
            char tmp = cs[i];
            cs[i] = cs[end+start-1-i];
            cs[end+start-1-i] = tmp;
        }
    }
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...