剑指offer--(11)左旋转字符串--Java描述

本文介绍了一种字符串左移问题的两种解决方案。一种通过三次反转操作完成,另一种则是直接进行字符串的截取和拼接。两种方法各有特点,前者更通用,后者简洁但可能不适用于所有情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

    这道问题与上一篇博客类似,大家可以先参考一下(http://blog.youkuaiyun.com/may_3/article/details/79358590),那么这道问题的解题思路是,将整个字符串分为两部分:

    第一部分:前k个字符(也就是要左移的字符串),第二部分:后面的所有字符。

代码实现:

  

	public String LeftRotateString(String str, int n) {
		if (str.length() == 0) {
			return "";
		}
		// 分成两部分
		String[] spilt = { str.substring(0, n), str.substring(n, str.length()) };
		String result = "";
		// 分别反转数组的两部分,组成一个新的字符串
		for (String i : spilt) {
			i = resverse(i);
			result += i;
		}
		// 最后整体反转
		return resverse(result);
	}

	private String resverse(String str) {
		char[] array = str.toCharArray();
		char temp;
		for (int i = 0; i < array.length / 2; i++) {
			temp = array[i];
			array[i] = array[array.length - 1 - i];
			array[array.length - 1 - i] = temp;

		}
		return String.valueOf(array);
	}

此外,还有一种较为取巧的方式,也为大家展现一下:

	public String LeftRotateString(String str, int n) {
		if (str.length() == 0) {
			return "";
		}
		// 分割字符串
		String s1 = str.substring(0, n);
		String s2 = str.substring(n, str.length());
		return s2 + s1;
	}

这种方式是利用了字符串的截取+拼接,可能并不适用于其他的题目,所以建议选择上面的方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值