演算法 字串解碼

2021-10-06 15:23:32 字數 2372 閱讀 5772

給定乙個經過編碼的字串,返回它解碼後的字串。

編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重複 k 次。注意 k 保證為正整數。

你可以認為輸入字串總是有效的;輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。

此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數 k ,例如不會出現像 3a 或 2[4] 的輸入。

示例:

s = "3[a]2[bc]", 返回 "aaabcbc".

s = "3[a2[c]]", 返回 "accaccacc".

s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

方法一

先得到2,然後遞迴進入第乙個中括號

得到4,遞迴進入

得到ab,遇到]返回上一層

ab進行4次重複,遇到]返回上一層

把得到的字串進行2次重複。然後繼續下一組。

對於第二個問題,很簡單,重新寫乙個方法來遞迴,然後加入position引數即可。第乙個問題有兩個思路:

全域性變數

在返回引數中加入

方法二有遞迴,那麼和遞迴一樣思路的是什麼?沒錯就是棧,那麼我們可以使用乙個輔助棧解決這個問題。思路和遞迴是差不多的:

遍歷字串陣列並把字元放進棧。

當遍歷到]時進行回溯,把中距離棧頂第乙個[前的字串拿出來

然後再遍歷數字,遇到棧底或者]停止

然後進行迴圈運算後把字串放進棧中

最後返回棧中的字串

方法一

fun

decodestring

(s: string)

: string

fungetstrings

(s:string,i:int)

:stringarray

else

if(s[position]

in'0'

..'9'

)else

if(s[position]

=='[')}

else

if(s[position]

==']'

) position++

}val stringarray =

stringarray()

stringarray.

add(stringbuilder.

tostring()

) stringarray.

add(position.

tostring()

)return stringarray

}

方法二
fun

decodestring

(s: string)

: string

stack.

pop(

)val string = stringbuilder.

reverse()

.tostring()

var num =

0var i =

0while

(stack.

isnotempty()

&& stack.

peek()

>=

'0'&& stack.

peek()

<=

'9')

for(j in

1..num)

}else stack.

add(c)

}val sb =

stringbuilder()

while

(stack.

isnotempty()

) sb.

reverse()

return sb.

tostring()

}

假如最終的字串長度為n,原字串的長度為k

方法一時間複雜度:遍歷原字串,還需要把新字元乙個個拼進來。

時間複雜度:o(n+k)

空間複雜度:這裡所需要的空間是遞迴棧的深度,最壞情況下為k

空間複雜度:o(k)

方法二

時間複雜度:除了遍歷一次原字串,還要把每個字元都放進棧中所以是

時間複雜度:o(n+k)

空間複雜度:需要乙個棧來儲存資料,棧的長度為字串的長度

空間複雜度:o(n)

演算法題 字串解碼

1,給定乙個字串,目標是將寫在 和 之間的字串,重複 號前面的數字次數 數字只會是個位數 2,例如 輸入結果 strs he3 llo world 輸出結果 res hellollolloworld 輸入結果 strs he3 ll2 o wo rld 輸出結果 res helloowolloowo...

字串解碼

給定乙個經過編碼的字串,返回它解碼後的字串。編碼規則為 k encoded string 表示其中方括號內部的 encoded string 正好重複 k 次。注意 k 保證為正整數。你可以認為輸入字串總是有效的 輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為原始資料不...

字串解碼

題目描述 給定乙個經過編碼的字串,返回它解碼後的字串。編碼規則為 k encoded string 表示其中方括號內部的 encoded string 正好重複 k 次。注意 k 保證為正整數。你可以認為輸入字串總是有效的 輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為...