java两种方式实现“将字符串前m位移到字符串的第n位之后”

来源:互联网 发布:移动感知测试软件 编辑:程序博客网 时间:2024/05/20 08:26

最近看了《编程之法:面试和算法心得》这本书,被各种高深的算法给膜拜了(本人职场小白,开发经验有限,抱着一颗学习的心,向大神学习),在这里整理了书中的部分算法,主要有两个目的:

1、做记录,为了以后使用方便查询。

2、分享学习,发表博客分享好东西,大家相互学习,有什么错误的地方,也请各位大神指教!


本文章是以《编程之法:面试和算法心得》书籍作为基础,将书籍中的算法使用java语言进行整理,以及个人所列举的计算方法,本文章根据本书中的第一章第一节字符串的旋转进行整理,并且提出了本人平时使用的计算方法(本人方法卓略,大神勿喷),以供日后查阅,及分享!


以下为个人根据书籍整理的算法,以java语言编程,代码如下:

package bianchengzhifaExample;/** * 将字符串前m位移到字符串的第n位之后 * @author cyz * */public class Reverse {/** * 逐字位移 * @param s   * @param n   字符串长度 * @param m   需反转字符串长度 * @return */public String LeftRotateString1(char[] s,int n ,int m){while (m-->0) {LeftShiftOne(s,n);}String str="";for (int i = 0; i < s.length; i++) {str+=s[i];}return str;}public void LeftShiftOne(char[] s,int n){char t=s[0];for (int i = 1; i < n; i++) {s[i-1]=s[i];}s[n-1]=t;}/** * 三步反转(使用时该方法时n一定要大于m) * @param s   * @param n   被反转字符串位置 * @param m   需反转字符串长度 */public String LeftRotateString2(char[] s,int n,int m){m%=n;ReverseString(s, 0, m-1);ReverseString(s, m, n-1);ReverseString(s, 0, n-1);String str="";for (int i = 0; i < s.length; i++) {str+=s[i];}return str;}public void ReverseString(char[] s,int from ,int to){while (from<to) {char t=s[from];s[from++]=s[to];s[to--]=t;}}public String LeftRotateString3(){return new String();}public static void main(String[] args) {Reverse r=new Reverse();String str="abcdefghijklmnopq";System.err.println("-----------使用逐位反转----------------");System.err.println("str反转前:"+str);char[] s1=str.toCharArray();String str1=r.LeftRotateString2(s1, 2, 1);//String str1=r.LeftRotateString1(s1, str.length(), 4);System.err.println("str反转后:"+str1);System.err.println("-----------使用三步反转----------------");System.err.println("str反转前:"+str);char[] s2=str.toCharArray();String str2=r.LeftRotateString2(s2, 2, 1);////String str2=r.LeftRotateString2(s2, str.length(), 4);System.err.println("str反转后:"+str2);}}


0 0