前言
熟悉了基本操作,还是简单的。
内容
一、有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号
栈
由于栈结构的特殊性,非常适合做对称匹配类的题目
func isValid(s string) bool {
if len(s)%2==1{
return false
}
hash:=map[byte]byte{')':'(',']':'[','}':'{'}
//这个代码块中的每一对键值对都表示一种配对关系。例如,')':'(' 表示 ')' 映射到 '(',也就是说,当我们在文本中遇到 ')',我们可以用 '(' 来替换它
stack:=[]byte{}//用于存储遇到的左括号
for i:=0;i<len(s);i++{
if s[i]=='('||s[i]=='['||s[i]=='{'{
stack=append(stack,s[i])
}else if len(stack)!=0&&stack[len(stack)-1]==hash[s[i]]{
stack=stack[:len(stack)-1]
}else{
return false
}
// 如果当前字符是一个右括号,检查它是否与stack的最后一个元素(即一个左括号)配对。如果配对,则从stack中移除这个左括号。
}
return len(stack)==0
}
二、删除字符串中的所有重复项
给出由小写字母组成的字符串 S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
栈
栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。然后再去做对应的消除操作。
func removeDuplicates(s string) string {
stack:=[]byte{}
for i:=0;i<len(s);i++{
// 栈不空 且 与栈顶元素不等
if len(stack)!=0&&stack[len(stack)-1]==s[i]{
// 弹出栈顶元素 并 忽略当前元素(s[i])
stack=stack[:len(stack)-1]
}else{
// 入栈
stack=append(stack,s[i])
}
}
return string(stack)
}
最后
竟然月中了!脑子里还是以为离月中还有很久,天!太糊涂了,抓紧时间!