每日一題 字串解碼

2021-10-25 07:45:27 字數 1556 閱讀 9672

題目描述

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

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

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

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

示例1

輸入:s = 「3[a]2[bc]」

輸出:「aaabcbc」

示例2

輸入:s = 「3[a2[c]]」

輸出:「accaccacc」

思路

本題用棧來解決,用乙個整形變數作為指標來遍歷字串,然後依次進行入棧和出棧的操作,具體情況如下:如果當前的字元是數字,則將數字(可能是二位數、三位數等)轉化為字串**棧;如果遇到了字母或者左括號,則直接入棧;如果遇到了右括號,則將指標加1,並且將字串放到乙個子棧中,然後處理左括號直接彈棧,左括號的左邊是數字,取出該數字後對字串進行處理,先將子棧中的字元進行翻轉,然後將字串新增到stringbuilder中,向棧中繼續新增該轉化後的字串,最後遍歷一遍棧,並進行拼接,返回,時間複雜度為o(n)。

**

class

solution

else

if(character.

isletter

(cur)

|| cur ==

'[')

//碰到了右括號

else

//左括號彈棧

stack.

removelast()

;int rep = integer.

parseint

(stack.

removelast()

);collections.

reverse

(sub)

; string o =

getstring

(sub)

; stringbuilder sb =

newstringbuilder()

;while

(rep>0)

stack.

addlast

(sb.

tostring()

);}}

return

getstring

(stack);}

public string getdigit

(string s)

return sb.

tostring()

;}public string getstring

(linkedlist

v)return sb.

tostring()

;}}

每日一題 字串

題目描述 小n現在有乙個字串s。他把這這個字串的所有子串都挑了出來。乙個s的子串t是合法的,當且僅當t中包含了所有的小寫字母。小n希望知道所有的合法的s的子串中,長度最短是多少。輸入描述 一行乙個字串s。只包含小寫字母。s的長度不超過1e6.輸出描述 一行乙個數字,代表最短長度。資料保證存在乙個合法...

每日一題 字串相加(C )

題目描述 給定兩個字串形式的非負整數 num1 和num2 計算它們的和。1.num1 和num2 的長度都小於 5100 2.num1 和num2 都只包含數字 0 9 3.num1 和num2 都不包含任何前導零 4.你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數...

Leedcode 每日一題 字串的排序

給定兩個字串s1和s2,寫乙個函式來判斷s2是否包含s1的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 false注意 輸入的字...