20. 有效的括号 golang 堆栈

借用arraystack的包完成

import "github.com/emirpasic/gods/stacks/arraystack"func isValid(s string) bool {stack := arraystack.New()for _, c := range s {if c == '(' {stack.Push(')')} else if c == '[' {stack.Push(']')} else if c == '{' {stack.Push('}')} else {if stack.Empty() {return false}tempC, _ := stack.Pop()if tempC != c {return false}}}return stack.Empty()
}

接下来分析一下arraystack的实现

arraystack

用法

A stack based on a array list.

ArrayStack
A stack based on a array list.Implements Stack, IteratorWithIndex, JSONSerializer and JSONDeserializer interfaces.package mainimport "github.com/emirpasic/gods/stacks/arraystack"func main() {stack := arraystack.New() // emptystack.Push(1)             // 1stack.Push(2)             // 1, 2stack.Values()            // 2, 1 (LIFO order)_, _ = stack.Peek()       // 2,true_, _ = stack.Pop()        // 2, true_, _ = stack.Pop()        // 1, true_, _ = stack.Pop()        // nil, false (nothing to pop)stack.Push(1)             // 1stack.Clear()             // emptystack.Empty()             // truestack.Size()              // 0
}

stack的new,push和pop

// Push adds a value onto the top of the stack
func (stack *Stack) Push(value interface{}) {stack.list.Add(value)
}// Pop removes top element on stack and returns it, or nil if stack is empty.
// Second return parameter is true, unless the stack was empty and there was nothing to pop.
func (stack *Stack) Pop() (value interface{}, ok bool) {value, ok = stack.list.Get(stack.list.Size() - 1)stack.list.Remove(stack.list.Size() - 1)return
}// String returns a string representation of container
func (stack *Stack) String() string {str := "ArrayStack\n"values := []string{}for _, value := range stack.list.Values() {values = append(values, fmt.Sprintf("%v", value))}str += strings.Join(values, ", ")return str
}

A stack based on a array list。


// Add appends a value at the end of the list
func (list *List) Add(values ...interface{}) {list.growBy(len(values))for _, value := range values {list.elements[list.size] = valuelist.size++}
}// Get returns the element at index.
// Second return parameter is true if index is within bounds of the array and array is not empty, otherwise false.
func (list *List) Get(index int) (interface{}, bool) {if !list.withinRange(index) {return nil, false}return list.elements[index], true
}// Remove removes the element at the given index from the list.
func (list *List) Remove(index int) {if !list.withinRange(index) {return}list.elements[index] = nil                                    // cleanup referencecopy(list.elements[index:], list.elements[index+1:list.size]) // shift to the left by one (slow operation, need ways to optimize this)list.size--list.shrink()
}

list


// Check that the index is within bounds of the list
func (list *List) withinRange(index int) bool {return index >= 0 && index < list.size
}func (list *List) resize(cap int) {newElements := make([]interface{}, cap, cap)copy(newElements, list.elements)list.elements = newElements
}// Expand the array if necessary, i.e. capacity will be reached if we add n elements
func (list *List) growBy(n int) {// When capacity is reached, grow by a factor of growthFactor and add number of elementscurrentCapacity := cap(list.elements)if list.size+n >= currentCapacity {newCapacity := int(growthFactor * float32(currentCapacity+n))list.resize(newCapacity)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

215. 数组中的第K个最大元素 golang

Me func findKthLargest(nums []int, k int) int {sort.Ints(nums)return nums[len(nums)-k] }golang实现快排和冒泡排序 1. bubbleSort // method2 func swap(a *int, b *int) {temp : *a*a *b*b temp }func bubbleSort(nums []int) {for i:0; i < len(nums); i {for…

Qt实现对json文件的解析

json是一种轻量级的数据结构&#xff0c;其内部的结构是一种键值对(key-value)的组合&#xff0c;最外层是{ }。key是带双引号的字符串常亮&#xff0c;用于获取和存储&#xff1b;value的值可以是bool变量&#xff0c;字符串常量&#xff0c;对象或数组(也是一个key-value的组…

解决QTreeWidget中item无法整行同时显示相同颜色

对于QTreeWidget来说&#xff0c;继承自QTreeView&#xff0c;因此设计QTreeWidget中的样式设计&#xff0c;归根结底是对QTreeView的样式设计&#xff0c;而对于QTreeView中item样式设计&#xff0c;可以分为对branch和item设计&#xff0c;另外QT Style Sheet可以通过设置sho…

279. 完全平方数 golang

Me func checkRecord(s string) bool {return !(strings.Count(s, "A") > 1 || strings.Contains(s, "LLL")) }golang的string用法 func EqualFold func EqualFold(s, t string) bool 判断两个utf-8编码字符串&#xff08;将unicode大写、小写、标题…

Qt自定义对话框中边框阴影实现

1. 对于Window系统或者Unix系统&#xff0c;QDialog有一个默认的边框(样式看起来有点复古)&#xff0c;不过Qt可以提供自定义的边框设计&#xff0c;通过设置对话框相关属性&#xff1a; setWindowFlags(Qt::Dialog | Qt:: FramelessWindowHint); //设置不适应默认边框 setAt…

344. 反转字符串 golang

Me 双指针操作。首指针和尾指针 func reverseString(s []byte) {left,right:0,len(s)-1for left < right && len(s) ! 0 {s[left],s[right]s[right],s[left]leftright--} }

Qt自定义数据类型注册meta-object system

在Qt项目开发过程中&#xff0c;有时候会碰到需要使用自定义数据类型作为信号或者槽的参数进行数据传输&#xff0c;由于信号或者槽中的参数必须为Qt meta-object 系统中能够识别的参数&#xff0c;但是自定义数据类型仅仅只是程序代码编写者自己知道&#xff0c;编译器在编译的…

Qt使用invokeMethod反射机制实现线程间的通信

对于Qt来说&#xff0c;UI线程是主线程&#xff0c;对于同一UI线程中对象的通信可以通过connect进行信号与槽关联来实现&#xff0c;但是当UI中对象A中的子线程B需要和另外UI对象C进行通信的时候&#xff0c;如果这个时候使用connect来进行通信的话,需要B对象和A对象进行关联将…

Qt eventFilter实现信号与槽

对于Qt来说&#xff0c;信号与槽机制是其通信的一大亮点&#xff0c;但是Qt中也提供了其他的方法实现数据间的通信&#xff0c;如invokeMethod反射机制实现通信(https://blog.csdn.net/xx18030637774/article/details/105017306),另外Qt还提供了使用eventFilter来实现数据通信&…

318. 最大单词长度乘积 golang

question 给定一个字符串数组 words&#xff0c;找到 length(word[i]) * length(word[j]) 的最大值&#xff0c;并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词&#xff0c;返回 0。 示例 1: 输入: [“abcw”,“baz”,“foo”,“…

Qt编译错误:无法解析的外部符号 __imp__CloseServiceHandle __imp__OpenSCManager

在项目开发的过程&#xff0c;我在Qt的pro工程文件中添加了一个静态库&#xff0c;编译工程后报了这个错误&#xff0c;一开始以为是静态库有问题&#xff0c;验证之后发现静态库是正确的&#xff0c;最后才发现CloseServiceHandle和openSCManager这几个API都保存在系统库Advap…

242. 有效的字母异位词 golang

242. 有效的字母异位词 两个单词如果包含相同的字母&#xff0c;次序不同&#xff0c;则称为字母易位词(anagram) 思路 字符转换成bytebyte排序byte挨个对比 // 两个单词如果包含相同的字母&#xff0c;次序不同 func quickSort(arr []byte, left int, right int) {if left &…

leetcode验证冒泡排序效率

结论&#xff1a;快排比冒泡慢 bubbleSort leetcode_bubbleSort // 两个单词如果包含相同的字母&#xff0c;次序不同 func bubbleAsort(values []byte) {for i : 0; i < len(values)-1; i {for j : i1; j < len(values); j {if values[i]>values[j]{values[i],va…

QString转化为const char *出现乱码问题

对于Qt项目开发中&#xff0c;常常会遇到QString和const char*的转化问题&#xff0c;Qt也提供了响应的API接口&#xff0c;可以把QString转化为QByteArray&#xff0c;然后再转化为const char *,具体代码如下&#xff1a; QString string("helloWorld"); const cha…

go有没有引用类型

没有引用类型 go没有引用类型在函数内部修改变量&#xff1f; 指针类型 测试代码如下 package mainimport "fmt"func add(a int) {fmt.Println("a int")fmt.Printf("%d\n", &a)a 1 }func add2(a *int) {fmt.Println("a *int"…

Qt中的QByteArray和自定义结构体之间的相互转换

在Qt项目开发中&#xff0c;经常会碰到自定义结构体和字符数组之间的转换问题&#xff0c;不妨假设结构体名字为custom_struct, 字符数组名字为array_data 1. QByteArray转换为自定义结构体 custom_struct *struct_data reinterpret_cast<custom_struct *>(array_data…

20. 有效的括号 golang(2)

ASCII码来处理 第一种方法使用了栈的包&#xff0c;这种方式使用了ASCII码处理&#xff0c;但是&#xff0c;做题的时候还是需要查 //ASCII码 {123 }125 (40 )41 [91 ]93 func isValid(s string) bool {size : len(s)stack : make([]byte, size)top : 0 for i:0; i<size; i …

Qt控件大小自适应电脑分辨率问题

在最近的Qt工具开发工程中&#xff0c;发现一个问题&#xff1a;在自己电脑(分辨率是1366*768)上开发出来的工具&#xff0c;发布给同事(分辨率1920*1280)使用的过程中却出现了空间字体&#xff0c;边框等变形的问题&#xff0c;最后发现原因是因为在样式设计中&#xff0c;混合…

27. 移除元素 golang

空间复杂度O(1) 题目中不需要保持数组按照原来的顺序。 返回值是删除完key的剩余元素个数。所以我们使用前后指针&#xff0c;f指针指到key的位置&#xff0c;l指最后非key的位置。交换元素。 func removeElement(nums []int, val int) int {i, j : 0, len(nums) - 1for {for …

Qt 编译错误 LINK2001:无法解析的外部符号 public: virtual struct QMetaObject const thiscall Widget::metaObject

对于Qt来说&#xff0c;signal和slots是Qt的核心&#xff0c;而对于信号来说&#xff0c;只有继承了QObject的类&#xff0c;并且在类中添加Q_OBJECT宏&#xff0c;信号才能有效地和槽建立连接。可是在Qt开发的前期&#xff0c;可能预测不到需要在类中添加信号&#xff08;也就…