目录

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. [CF115E]Linear Kingdom Races

    [CF115E]Linear Kingdom Races 题目大意: 有\(n(n\le10^5)\)个物品,编号为\(1\sim n\).选取第\(i\)个物品需要\(c_i\)的代价.另外有\(m ...

  2. [CodeForces-375E]Red and Black Tree

    题目大意: 给你一棵带边权的树,每个结点可能是红色或者黑色,你可以交换若干个点对使得任意一个红点到达与其最近的黑点的距离小于等于m. 思路: 动态规划. f[i][j][k]表示以i为根的子树中,连向 ...

  3. java中代码块的认知

    在以往面试题中,出现过很多次关于代码块执行顺序的题目,目前可算是搞清楚执行顺序了.看以下代码: package com.itcast.code; public class BlockTest { st ...

  4. poj2117 Electricity

      试题描述 求一个图删除一个点之后,联通块最多有多少. 输入 多组数据.第一行两个整数 P,C 表示点数和边数.接下来 C 行每行两个整数 p1,p2,表示 p1 与 p2 有边连接,保证无重边.读 ...

  5. BZOJ 4517: [Sdoi2016]排列计数 错排公式

    4517: [Sdoi2016]排列计数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4517 Description 求有多少种长度为 ...

  6. HDU 5642 King's Order 动态规划

    King's Order 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5642 Description After the king's speec ...

  7. Python中用MacFSEvents模块监视MacOS文件系统改变一例

    最近一个项目中用gulp-watch不能满足需求,于是想到了用Python来解决问题.在安装了MacFSEvents模块后,写了下面一个小程序. #!/usr/bin/env python2 #-*- ...

  8. System.Threading.Tasks并发和异步代码使用

    main.cs System.Threading.Tasks.Parallel.For(0, 10, i =>            {                TestLock test ...

  9. Python学习(四)数据结构 —— str

    Python 字符串 str 本章大致介绍了 Python 的字符串类型 str,包括字符串的赋值及转义.字符串运算符.字符串格式化输出 以及 一些字符串的内建函数等. 字符串赋值及转义 我们可以使用 ...

  10. HDU1230 火星A+B

    火星A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...