現在有一種字串的壓縮規則是這樣的: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 ...