• 第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
  • 相关阅读:
    视觉(9)争取快点看完基于图论的立体匹配算法
    STL笔记(2) STL之父访谈录
    视觉(7)Computer vision from Wikipedia
    *NIX工具使用(1) Vim notes
    STL笔记(1)map
    AI杂谈(1) 你喜欢ML里的哪些模型?希望ML未来向什么方向发展?
    AI杂谈(3): dodo:人脸识别方法个人见解(zz from prfans)
    AI杂谈(2)请教支持向量机用于图像分类
    视觉(3)blepo
    windows编程(2)深入探讨MFC消息循环和消息泵
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041969.html
Copyright © 2020-2023  润新知