遞迴演算法練習 解壓縮

2021-09-01 12:33:17 字數 1254 閱讀 1966

現在有一種字串的壓縮規則是這樣的:k[string],表示string連續出現k次(0 < k < 1000)。

例如:s = 「ef3[a]2[bc]gh」 解壓後的字串為 「efaaabcbcgh」。這種壓縮也可以巢狀,s = 「3[a2[c]]」 解壓後為 「accaccacc」。

輸入乙個字串s,請輸出乙個解壓後的字串。輸入都是嚴格合法的,數字只用來表示重複次數,不會出現3a或者2[4]這樣的輸入。解壓後的字串只有字母。

應用遞迴的思想,並列括號順序處理,巢狀括號遞迴處理。

處理方式:遇到括號,將括號內解壓後的字串疊加n次,插入到原字串指定位置,注意邊界。

終止條件:當字串中沒有數字時終止,返回原串。

public string recursion

(string parstr)

if(parstr.

charat

(right)

==']')if

(couplenum ==0)

right++;}

// 擷取left和right中間的子串

string substring = parstr.

substring

(left +

1, right)

;// 遞迴處理子串

string tempstring =

recursion

(substring)

;// 將處理後的子串累加cirnum次

stringbuilder recursionstr =

newstringbuilder()

;for

(int i =

0; i < cirnum; i++

)// 將累加後的子串拼接到父串上

parstr = parstr.

substring(0

, iter)

+ recursionstr.

tostring()

+ parstr.

substring

(right+1)

;//拼接後iter跳到正確的位置

iter = iter + cirnum *

(right - left -1)

;}// 不是數字,繼續尋找

else

}// 返回原串或者處理後的串

return parstr;

}

PackBits解壓縮演算法

packbits壓縮方式是每段資料都有乙個頭 有符號的8bit型別資料 和資料。具體形式如下圖所示。當頭部的值為 1 127表示頭部後面的1乙個位元組的資料進行過資料壓縮,解壓縮時需要將頭部後面的乙個位元組的資料重複頭部值的絕對值 1次。當頭部的值為0 127表示頭部後面頭部值 1個位元組的資料沒有...

壓縮解壓縮

壓縮 壓縮後的檔名 包含物理路徑 待壓縮的資料夾 包含物理路徑 public static void packfiles string filename,string directory catch exception 解壓縮 待解壓檔名 包含物理路徑 解壓到哪個目錄中 包含物理路徑 public ...

壓縮 解壓縮

linux使用最廣泛的壓縮格式位gz,使用gzip命令進行壓縮和解壓縮 1 gzip,gunzip,壓縮 解壓縮檔案,compress or expand files gzip acdfhkllnnrtvv19 s suffix name gunzip acfhkllnnrtvv s suffix ...