[剑指Offer]-左旋转字符串
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。
解题思路
- 以"abcdefg"为例,我们可以把它分为两部分。
- 由于想把它的前两个字符移到后面,我们就把前两个字符分到第一部分,把后面的所有字符都分到第二部分。
- 我们先分别翻转这两部分,于是就得到"bagfedc"。接下来我们再翻转整个字符串,得到的"cdefgab"刚好就是把原始字符串左旋转2位的结果。
算法图解
参考代码:
package offer;
/**
* 左旋转字符串 abcdefg 2 ----->cdefgab
*/
public class Offer58_2 {
public static void main(String[] args) {
String string = "abcdefg";
int index = 2; // 后置前两个字符
StringBuilder temp = new StringBuilder(string);
StringBuffer stringBuffer=new StringBuffer();
String reverse = String.valueOf(temp.reverse());
String headString = reverse.substring(0, string.length() - index);
stringBuffer.append(new StringBuilder(headString).reverse());
String endString = reverse.substring(string.length() - index, string.length());
stringBuffer.append(new StringBuilder(endString).reverse());
System.out.printf(stringBuffer+"");
}
}
附录
该题源码在我的 ????Github 上面!