第26题:旋转字符串

github:https://github.com/frank-cq/MyTest

第26题:定义字符串的旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求对长度为n的字符串操作的时间复杂度为O(n),辅助内存为O(1)。


代码

package test026;

/**
 * Created by cq on 2015/6/23.
 * 第26题:定义字符串的做旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如
 *        把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求
 *        对长度为n的字符串操作的时间复杂度为O(n),辅助内存为O(1)。
 */
public class Test026 {
    //类似于第10题的翻转英文句子,只是将句子分为两个部分
    public static String rotateSentence(String sentence, int rotationNum){

        rotationNum = rotationNum % sentence.length();
        if (sentence == null || sentence.length() == 1 || rotationNum < 1){
            return null;
        }

        char[] charArray = sentence.trim().toCharArray();
        int arrLength = charArray.length;

        //翻转前半部分
        reverseCharArr(charArray,0,rotationNum-1);
        //翻转后半部分
        reverseCharArr(charArray,rotationNum,arrLength-1);
        //将整个字符串按字符首尾翻转
        reverseCharArr(charArray,0,arrLength-1);

        return String.valueOf(charArray);
    }
    //翻转字符数组中的一部分
    public static void reverseCharArr(char[] charArr, int head, int tail){
        while (head < tail){
            if (charArr[head] != charArr[tail]){
                charArr[head] ^= charArr[tail];
                charArr[tail] ^= charArr[head];
                charArr[head] ^= charArr[tail];
            }
            head++;
            tail--;
        }
    }

    public static void main(String[] args){
        System.out.println("将字符串 abcdef 左旋转2位后得:"+rotateSentence("abcdef",2));
    }
}




执行结果

Connected to the target VM, address: '127.0.0.1:2024', transport: 'socket'
将字符串 abcdef 左旋转2位后得:cdefab
Disconnected from the target VM, address: '127.0.0.1:2024', transport: 'socket'

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值