此题来自牛客网
链接:左旋转字符串
题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
示例
:
输入 “abcXYZdef”, 3
输出 “XYZdefabc”
实现代码
1.内置函数substring
实现
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
int n = sc.nextInt();
System.out.println("坐旋转后字符串为: " + LeftRotateString(str1, n));
sc.close();
}
public static String LeftRotateString(String str, int n){
if(str==null || n<1 || str.length()==0){ //当字符串是为空以及左移位数小于1时
return " "; //返回str也可以
}
int len = str.length();
n = n % len; //当左移数大于字符串长度时进行处理
//使用内置函数substring,函数功能为截取字符串
String one = str.substring(0,n);
String two = str.substring(n,len); //写成String two = str.substring(n)也是可以的
return two + one;
}
2.三次翻转实现
直接看代码理解
//该函数功能为翻转,类似逆置
public static void reverseString(char[] arr,int start,int end){
while(start < end){
char tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
start++;
end--;
}
}
public static String LeftRotateString(String str, int n){
if(str==null || str.length()==0 || n<1){
return str;
}
int len = str.length(); //获取字符串的长度
if(n > len){
n = n % len;
}
char[] arr1 = str.toCharArray(); //将字符串转为字符数组,便于操作
reverseString(arr1, 0, n-1); //调用reverseString方法
reverseString(arr1, n, len-1);
reverseString(arr1, 0, len-1);
return new String(arr1); //将字符数组转为字符串
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine(); //输入字符串
int number = sc.nextInt(); //输入整数
System.out.println("字符串左旋转"+number+"位后形式为"+LeftRotateString(str1,number));
sc.close();
}
运行结果如下:
有什么问题大家一起讨论 共同进步!