1. 程式人生 > 其它 >Java雙鏈表實現左旋轉字串

Java雙鏈表實現左旋轉字串

技術標籤:Java連結串列字串演算法資料結構leetcode

劍指 Offer 58 - II. 左旋轉字串

題目網址

劍指 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); } }

執行結果

在這裡插入圖片描述