剑指offer面试题42_2 左旋转字符串

来源:互联网 发布:网络推广产品代理 编辑:程序博客网 时间:2024/06/06 08:29

主要思想:

将字符串分为两部分,将前n个字符看成第一部分,后面的所有字符看成第二部分,先分别翻转这两部分,最后在翻转整个字符串即可以实现左旋转字符串。

public class Solution {public String LeftRotateString(String str, int n) {//还需考虑对n是否大于字符串的长度if (str == null || str.length() <= 0 || n < 0) {return "";}//防止内存访问越界if (n > str.length()) {return str;}int length = str.length();//包括第0位,但不包括第n位String substring1 = str.substring(0, n);String subString2 = str.substring(n, length);char[] charArray1 = substring1.toCharArray();char[] charArray2 = subString2.toCharArray();//对charArray1进行翻转Reverse(charArray1, 0, charArray1.length - 1);//对charArray2进行翻转Reverse(charArray2, 0, charArray2.length - 1);//将两个字符数组进行拼接,在整体翻转char[] appendCharArray = new char[charArray1.length + charArray2.length];for (int i = 0; i < charArray1.length; i++) {appendCharArray[i] = charArray1[i];}for (int i = charArray1.length; i < appendCharArray.length; i++) {appendCharArray[i] = charArray2[i - charArray1.length];}Reverse(appendCharArray, 0, appendCharArray.length - 1);String s = String.valueOf(appendCharArray);return s;}public char[] Reverse(char[] charArray, int begin, int end) {if (charArray == null) {return null;}while (begin < end) {char temp = charArray[begin];charArray[begin] = charArray[end];charArray[end] = temp;begin++;end--;}return charArray;}


阅读全文
0 0
原创粉丝点击