九章演算法 Google面試題 字串解碼

2021-10-25 08:12:28 字數 1237 閱讀 1814

給出乙個表示式 ​s​,此表示式包括數字,字母以及方括號。在方括號前的數字表示方括號內容的重複次數(括號內的內容可以是字串或另乙個表示式),請將這個表示式展開成乙個字串。

樣例1

輸入: s = abc3[a]

輸出: "abcaaa"

樣例2

輸入: s = 3[2[ad]3[pf]]xyz

輸出: "adadpfpfpfadadpfpfpfadadpfpfpfxyz"

題解

把所有字元乙個個放到 stack 裡, 如果碰到了 ​]​,就從 stack 找到對應的字串和重複次數,decode 之後再放回 stack 裡。

class

solution

:"""

@param s: an expression includes numbers, letters and brackets

@return: a string

"""def

expressionexpand

(self,s

):stack=

forcins

:ifc!=

']':

stack.(

c)continue

strs=

while

stack

andstack[-

1]!='['

:strs.(

stack

.pop

())# skip '['

stack

.pop

()repeats=0

base=1

while

stack

andstack[-

1].isdigit

():repeats+=(

ord(

stack

.pop

())-

ord(

'0'))

*base

base

*=10

stack.(

''.join

(reversed

(strs))*

repeats

)return''.

join

(stack

)

更多題解參考:九章演算法

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法 Google 面試題 解碼方法

有乙個訊息包含 a z 通過以下規則編碼 a 1 b 2 z 26 現在給你乙個加密過後的訊息,問有幾種解碼的方式 樣例 1 輸入 12 輸出 2 解釋 它可以被解碼為 ab 1 2 或 l 12 樣例 2 輸入 10 輸出 1 演算法 動態規劃 dp 演算法思路 思路 複雜度分析 n表示字串長度 ...

九章演算法 Google 面試題 有效括號字串

撰文 jz 專欄 九章演算法 給定乙個字串,由 三個字元組成,判斷是否滿足要求左括號和有括號一一對應,且對應的左括號必定在右括號前面。其中,可以被當做乙個單獨的左括號,右括號或者可以當做不存在 1.input output true 2.input output true 被當做空字元,不存在 3....