zoukankan      html  css  js  c++  java
  • 第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
  • 相关阅读:
    1152 Google Recruitment (20 分)
    1095 解码PAT准考证 (25 分)
    1093 字符串A+B (20 分)
    1094 谷歌的招聘 (20 分)
    拖动无边框窗体
    全屏显示窗体
    动态按钮的窗体界面
    以树形显示的窗体界面
    设计软件启动界面
    动画显示窗体
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041969.html
Copyright © 2011-2022 走看看