• 第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
  • 相关阅读:
    Linux下面编译安装ffmpeg
    Fidder简单使用方法(HTTPS抓取和url替换)
    关于一下个阶段的计划
    JAVA的随机的字符串的封装(基本上够用了)
    Shell Script中的间接变量引用
    进程概念
    int main(int argc, char *argv[])的解读
    存储数组数据到SharedPreferences
    C语言中的基本声明
    C中关于指针数组的用法
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041969.html
Copyright © 2020-2023  润新知