📅  最后修改于: 2023-12-03 15:27:10.819000             🧑  作者: Mango
这是一个用于字符串左旋转和右旋转的 Java 程序,可以通过传入一个字符串和旋转次数,输出旋转后的字符串。
该程序提供了以下两个功能:
左旋转是指将字符串中的前 n 个字符移动到字符串的尾部,例如:
输入字符串:"abcd",旋转次数:2
旋转后的字符串:"cdab"
右旋转是指将字符串中的后 n 个字符移动到字符串的头部,例如:
输入字符串:"abcd",旋转次数:2
旋转后的字符串:"cdab"
在使用该程序时,需要传入两个参数:
程序会根据旋转次数进行左右旋转,最终返回旋转后的字符串。
使用示例:
String str = "abcdefg";
int rotateCount = 2;
String leftRotatedStr = leftRotate(str, rotateCount);
String rightRotatedStr = rightRotate(str, rotateCount);
System.out.println("左旋转后的字符串:" + leftRotatedStr);
System.out.println("右旋转后的字符串:" + rightRotatedStr);
以下是该程序的实现代码:
/**
* 左旋转字符串
*
* @param str 要旋转的字符串
* @param rotateCount 旋转的次数
* @return 旋转后的字符串
*/
public static String leftRotate(String str, int rotateCount) {
if (str == null || str.length() == 0) {
return str;
}
char[] charArr = str.toCharArray();
int length = charArr.length;
// 处理旋转次数大于字符串长度的情况
rotateCount = rotateCount % length;
// 分别翻转前半部分、后半部分、整个字符串
reverse(charArr, 0, rotateCount - 1);
reverse(charArr, rotateCount, length - 1);
reverse(charArr, 0, length - 1);
return new String(charArr);
}
/**
* 右旋转字符串
*
* @param str 要旋转的字符串
* @param rotateCount 旋转的次数
* @return 旋转后的字符串
*/
public static String rightRotate(String str, int rotateCount) {
if (str == null || str.length() == 0) {
return str;
}
char[] charArr = str.toCharArray();
int length = charArr.length;
// 处理旋转次数大于字符串长度的情况
rotateCount = rotateCount % length;
// 分别翻转前半部分、后半部分、整个字符串
reverse(charArr, 0, length - 1 - rotateCount);
reverse(charArr, length - rotateCount, length - 1);
reverse(charArr, 0, length - 1);
return new String(charArr);
}
/**
* 翻转字符数组的部分内容
*
* @param charArr 字符数组
* @param start 起始位置
* @param end 结束位置
*/
private static void reverse(char[] charArr, int start, int end) {
while (start < end) {
char temp = charArr[start];
charArr[start] = charArr[end];
charArr[end] = temp;
start++;
end--;
}
}
该程序提供了字符串左旋转和右旋转的功能,旋转次数可以为任意自然数。在实现上,通过翻转前半部分、后半部分和整个字符串的方式实现了字符串的旋转,同时针对旋转次数大于字符串长度的情况进行了处理。