給出乙個表示式 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....