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

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

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);
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值