目录

1 问题描述

2 解决方案

2.1 蛮力移位

2.2 三步反转


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

算法笔记_022:字符串的旋转(Java)的更多相关文章

  1. 算法笔记_233:二阶魔方旋转(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示): 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下:x轴正向:绿x轴 ...

  2. 算法笔记_134:字符串编辑距离(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 给定一个源串和目标串,能够进行如下操作: 在任意位置上插入一个字符: 替换掉任意字符: 删除任意字符. 写一个程序,实现返回最小操作次数,使得对源串 ...

  3. 算法笔记_023:拓扑排序(Java)

    目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进 ...

  4. 算法笔记_028:字符串转换成整数(Java)

    1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串“123”,输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题的基本思路:从左至右 ...

  5. 算法笔记_024:字符串的包含(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力轮询法 2.2 素数相乘法 2.3 位运算法 1 问题描述 给定一长字符串A和一短字符串B.请问,如何最快地判断出短字符串B中的所有字符是否都在长字符串A ...

  6. 算法笔记_025:字符串的全排列(Java)

    目录 1 问题描述 2 解决方案 2.1 递归实现 2.2 字典序排列实现   1 问题描述 输入一个字符串,打印出该字符串的所有排列.例如,输入字符串”abc”,则输出有字符’a’,’b’,’c’所 ...

  7. 算法笔记_228:信用卡号校验(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证 ...

  8. 算法笔记_225:数字密码发生器(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全:如果设置不好记的密码,又担心自己也会忘记:如 ...

  9. 算法笔记_138:稳定婚姻问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为稳定婚姻问题? 有一个男士的集合Y = {m1,m2,m3...,mn}和一个女士的计划X = {n1,n2,n3,...,nn}.每一个男士有 ...

随机推荐

  1. [SDOI2015]约数个数和 --- 简单反演

    求\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}d(ij)\) 不知道怎么讲..... 首先考虑\(d(ij)\)究竟是什么 首先,很自然地想到,既然是求\( ...

  2. 【二分答案】【DFS】【分类讨论】Gym - 100851F - Froggy Ford

    题意:河里有n块石头,一只青蛙要从左岸跳到右岸,你可以再在任意一个位置放一块石头,使得在最优方案下,青蛙单步跳的距离的最大值最小化,输出该位置. 将原图视作完全图,二分答案mid,然后在图中只保留小于 ...

  3. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 -- 分层图最短路

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MB Description 每天,农夫 ...

  4. asp.net mvc4 简单使用Autofac依赖注入小结

    1,首先使用 NuGet下载适当的Autofac版本 文件一,Autofac.3.5.2 文件二,Autofac.Mvc4.3.1.0 1,接口类 public interface IReposito ...

  5. VMware中网络设置之NAT

    当完成VMwareWorkStation安装之后,网络连接中会多出两个网络连接,分别是VMnet1和VMnet8,如下图所示: 整个机器的结构就可以抽象成:VMware虚拟机系统(虚拟网卡vmnet0 ...

  6. JAVA 垃圾收集监控

    我们可以使用Java命令行和UI工具来监控应用程序的垃圾收集活动.下面的例子中,我使用Java SE Downloads 中一个演示程序. 如果你想使用同样的程序,前往 Java SE Downloa ...

  7. QTP 10 破解 之路

    1.下载QTP 10 安装包 2.破解软件(mgn-mqt82.exe)  (阿里云云主机里执行不了,一执行CPU就99%,也没有生成lservrc) 手动创建C:\Program Files (x8 ...

  8. webstrom内置压缩工具YUI-compressor详解

    压缩工具层次不穷,各有优点,选择适合的压缩工具为将来做项目开发使用是一件很重要的事情!!在这介绍YUI-compressor 英文官网:http://yui.github.io/yuicompress ...

  9. ted飞行器

    http://v.youku.com/v_show/id_XNTc0MTk0MzI4.html

  10. Extjs下拉树代码测试总结

    http://blog.csdn.net/kunoy/article/details/8067801 首先主要代码源自网络,对那些无私的奉献者表示感谢! 笔者对这些代码做了二次修改,并总结如下: Ex ...