Java 字符串移位

实现功能:实现字符串的移位操作

详述: 例如,“abcdefgh”循环右移5位得到“defghabc”

方法一:按位右移(空间复杂度O(1); 时间复杂度O(n*n))
移动1位:habcdefg
移动2位:ghabcdef
移动3位:fghabcde
移动4位:efghabcd
移动5位:defghabc

方法二:按移动位置切片(空间复杂度O(n);时间复杂度O(n))
“abcdefgh”切成“abc”和”defgh”,然后将“abc”append到“defgh”后面,得到“defghabc”

方法三:反转 + 反转 + 反转
找到反转位置后,
将“abc”反转成“cba”
将“defgh”反转成“hgfed”
当前字符串变为“cbahgfed”,再将此字符串整体反转变为“defghabc”得到结果。

代码如下:

public class Main {

    /**
     * @param args
     * abcdefgh 循环右移5位,转为 defghabc 要求时间复杂度O(n),空间复杂度O(1)
     */



    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s = "12345";
        int n = s.length() - 5;//要反转的位数
        char[] c = s.toCharArray();
        System.out.println(reverse(c, 0, n - 1));
        System.out.println(reverse(c, n, c.length - 1));
        System.out.println(reverse(c, 0, c.length - 1));
    }

    public static char[] reverse(char[] c, int beginI, int endI){
        char tmp ;

        for(int i = 0; i < endI - beginI; i ++){
            tmp = c[beginI];
            c[beginI] = c[endI];
            c[endI] = tmp;
            beginI ++;
            endI --;
        }

        return c;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值