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...