题目网址
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
样例
样例1
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
样例2
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
限制:1 <= k < s.length <= 10000
code
class Solution {
public String reverseLeftWords(String s, int n) {
DoubleSignalLink link= initLink(s,new DoubleSignalLink(),n);
return reverseLink(link,s);
}
//定义链表
private static class DoubleSignalLink{
char chr;
DoubleSignalLink next;
DoubleSignalLink pre;
DoubleSignalLink(){
}
DoubleSignalLink(char data){
this.chr=data;
}
}
//初始化链表,通过链表进行左右的拆分
private static DoubleSignalLink initLink(String str,DoubleSignalLink link,int target){
char [] arr =str.toCharArray();
DoubleSignalLink root =new DoubleSignalLink();
DoubleSignalLink head=link;
DoubleSignalLink tmp =root;
int i=0,j=1;
while (i<arr.length){
DoubleSignalLink t =new DoubleSignalLink(arr[i]);
if (j<=target){
tmp.next=t;
t.pre=tmp.next;
tmp=tmp.next;
j++;
}
else{
head.next=t;
t.pre=head.next;
head=head.next;
}
i++;
}
head.next=root.next;
root.pre=head;
return link.next;
}
//返回字符串
private static String reverseLink(DoubleSignalLink link,String str){
DoubleSignalLink head=link;
char [] arr =new char[str.length()];
int i=0;
while (head!=null){
arr[i]=head.chr;
head=head.next;
i++;
}
return new String(arr);
}
}