Java雙鏈表實現左旋轉字串
阿新 • • 發佈:2020-12-11
技術標籤:Java連結串列字串演算法資料結構leetcode
劍指 Offer 58 - II. 左旋轉字串
題目網址
題目描述
字串的左旋轉操作是把字串前面的若干個字元轉移到字串的尾部。請定義一個函式實現字串左旋轉操作的功能。比如,輸入字串"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);
}
}