括號演算法題總結

2021-09-17 21:58:14 字數 4357 閱讀 3124

1.去掉所有括號內的內容

public

static

void

main

(string[

] args)

dsrlist.

removelast()

;}else

} string dsrstring ="";

list

arraylist =

newarraylist

(dsrlist)

; string ssstring = arraylist.

tostring()

; ssstring = ssstring.

replaceall

(",",""

);ssstring = ssstring.

replaceall

("\\[",""

);ssstring = ssstring.

replaceall

("\\]",""

);ssstring = ssstring.

replace

(" ",""

);system.out.

println

(ssstring)

;}

輸出結果:

中國高校基地
2.多個括號巢狀,每個括號外有個數字表示重複的個數。(每個括號前面都會有數字)

例如: 輸入 abc3(a) 輸出abcaaa

輸入 2(2(a)2(b)) 輸出aabbaabb

自己目前寫的比較冗餘,以後想到複雜度低的再改進,但是可以暫時一步步理解。

public

class

test";

char

dsrchar = dsr.

tochararray()

; linkedlist

dsrlist =

newlinkedlist()

;for

(int i =

0; i < dsrchar.length;)

dsrlist.

removelast()

;//刪掉左括號

string temp ="";

while

(!stchar.

isempty()

)//得到前面的數字

stack

stnum =

newstack()

;while

(!dsrlist.

isempty()

&&character.

isdigit

(dsrlist.

getlast()

))int count =

transform

(stnum)

;//將字元棧中的字元都出棧並加入到linkedlist裡

char

c = temp.

tochararray()

;for

(int j =

1;j<=count;j++)}

//遇到中括號

}else

if(dsrchar[i]

==']')

dsrlist.

removelast()

;//刪掉左括號

string temp ="";

while

(!stchar.

isempty()

)//得到前面的數字

stack

stnum =

newstack()

;while

(!dsrlist.

isempty()

&&character.

isdigit

(dsrlist.

getlast()

))int count =

transform

(stnum)

;//將字元棧中的字元都出棧並加入到linkedlist裡

char

c = temp.

tochararray()

;for

(int j =

1;j<=count;j++)}

//遇到大括號

}else

if(dsrchar[i]

=='}')

dsrlist.

removelast()

;//刪掉左括號

string temp ="";

while

(!stchar.

isempty()

)//得到前面的數字

stack

stnum =

newstack()

;while

(!dsrlist.

isempty()

&&character.

isdigit

(dsrlist.

getlast()

))int count =

transform

(stnum)

;//將字元棧中的字元都出棧並加入到linkedlist裡

char

c = temp.

tochararray()

;for

(int j =

1;j<=count;j++)}

}else

} system.out.

println

(dsrlist.

tostring()

);system.out.

println

(dsrlist.

tostring()

);stringbuilder sb =

newstringbuilder()

;for

(character c:dsrlist)

system.out.

println

(sb.

tostring()

);}public

static

inttransform

(stack

stnum)

return integer.

valueof

(s);

}}

給定乙個只包含字元』(』,』)』,』』,』[『和』]'的字串,確定輸入字串是否有效。

如果輸入字串有效:

必須使用相同型別的括號關閉左括號。

必須以正確的順序關閉開啟括號。

example 1

:input:

"()"

output: true

example 2

:input:

"(){}"

output: true

example 3

:input:

"(]"

output: false

example 4

:input:

"([)]"

output: false

example 5

:input:

""output: true

public

boolean

isvalid

(string s)

else

if(s.

charat

(i)==

']')

if(s.

charat

(i)==

'}')}}

if(st.

empty()

)return

true

;return

false

;}

4.給定n對括號,編寫乙個函式來生成格式正確的括號的所有組合。

for example, given n =

3, a solution set is:

["((()))"

,"(()())"

,"(())()"

,"()(())"

,"()()()"

]

public list

generateparenthesis

(int n)

public

void

parentheses

(string str,list

list,

int left,

int right)

}

演算法題 補全括號序列

大概意思就是 給出乙個中括號序列,在序列前後可以加中括號字元,補全它。當時沒想起來解決辦法,然後涼涼了,後來專門去搞了這道題,終於搞定 思路在注釋裡寫的比較詳細了,此處不再贅述 用了類似棧的思想 字串轉陣列 param str string 輸入的字串 return array 轉換之後的結果陣列 ...

演算法題 最長有效括號

題目描述 給定乙個只包含 和 的字串,找出最長的包含有效括號的子串的長度。示例 1 輸入 輸出 2 解釋 最長有效括號子串為 示例 2 輸入 輸出 4 解釋 最長有效括號子串為 解法一 使用棧來儲存元素下標,從下標來計算長度。時間複雜度 o n n為字串長度,遍歷每個字串元素。空間複雜度 o n 棧...

Leetcode演算法題22 括號生成

廣度優先 佇列實現 自定義結點類 反思與總結 class solution if left n 當右括號的個數少於左括號的個數時,括號不閉合,可以新增右括號 if right left public list generateparenthesis int n class node public n...