zoukankan      html  css  js  c++  java
  • Java实现字符串的旋转

    1 问题描述
    给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串“abcdef”的前3个字符‘a’、‘b’和‘c’移到字符串的尾部,那么原字符串将变成“defabc”。请写一个函数实现此功能。

    2 解决方案
    2.1 蛮力移位

    此方法将需要移动的字符一个一个地移到字符串的尾部,具体代码如下:

    package com.liuzhen.string_1;
    
    public class StringRevolve {
        //方法1:蛮力移位
        /*
         * 参数s:给定字符串
         * 返回每次移动一位后的结果字符串
         */
        public String bruteOne(String s){
            char[] A = s.toCharArray();
            char temp = A[0];
            for(int i = 1;i < A.length;i++)
                A[i-1] = A[i];
            A[A.length-1] = temp;
            return String.valueOf(A);
        }
        /*
         * 参数s:给定字符串
         * 参数m:字符串前面需要移动的字符个数
         * 返回最终移动目标字符串
         */
        public String bruteRevolve(String s,int m){
            for(int i = m;i > 0;i--){
                bruteOne(s);
                System.out.println(bruteOne(s));
                s = bruteOne(s);
            }
            return s;
        }
        
        
        public static void main(String[] args){
            StringRevolve test = new StringRevolve();
            String s = "abcdef";
            String result = test.bruteRevolve(s,8);
            System.out.println("使用蛮力移位法得到结果:"+result);
        }
    }
    

    运行结果:

    bcdefa
    cdefab
    defabc
    efabcd
    使用蛮力移位法得到结果:efabcd
    

    2.2 三步反转
    此方法分3个步骤:

    (1)将原字符串分为X和Y两部分,其中X为“abc”,Y为“def”;

    (2)将X的所有字符反转,即相当于将“abc”变为“cba”;对Y也进行反转,由“def”变为“fed”;

    (3)最后,将上述步骤得到的结果整体再进行反转,即将“cbafed”整体反转为“defabc”,这样就实现了字符串旋转。

    具体代码如下:

    package com.liuzhen.string_1;
    
    public class StringRevolve {
        
        //方法2:三步反转
        /*
         * 参数A:字符串转化后的字符数组
         * 参数start:开始进行反转的字符位置
         * 参数end:进行字符反转的最后一个字符位置
         */
        public void revolveString(char[] A,int start,int end){
            while(start < end){
                char temp = A[start];
                A[start++] = A[end];
                A[end--] = temp;
            }
        }
        /*
         * 参数s:给定字符串
         * 参数m:字符串前面需要移动的字符个数
         */
        public String getRevolveString(String s,int m){
            char[] A = s.toCharArray();
            int len = s.length();          //字符串的总长度
            m = m % len;                   //如果移动位数大于字符串总长度,则其移动位数默认为m取余len
            revolveString(A,0,m-1);
            revolveString(A,m,len-1);
            revolveString(A,0,len-1);
            return String.valueOf(A);
        }
        
        public static void main(String[] args){
            StringRevolve test = new StringRevolve();
            String s = "abcdef";
            String result1 = test.getRevolveString(s, 4);
            System.out.println("使用三步反转法得到结果:"+result1);
        }
    }
    

    运行结果:

    使用三步反转法得到结果:efabcd
    
  • 相关阅读:
    ps去掉png alpha
    unity运行中抓显示中的贴图数量和内存
    再议移动平台的AlphaTest效率问题
    ios ExportOptions.plist
    iOS开发-导出xcode中已有的配置文件Provisioning profile
    iOS命令行自动打包(archive)
    mac sh相关
    在Mac中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
    mac运行sh
    mac上显示隐藏系统文件的快捷键
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077990.html
Copyright © 2011-2022 走看看