当前位置:网站首页>Stack: how to realize the judgment of valid brackets?
Stack: how to realize the judgment of valid brackets?
2022-07-04 20:35:00 【Wu_ Candy】
author | The way of immeasurable testing edit | Small Fine
Valid brackets , Brush over LeetCode Yes, maybe I'm familiar with this problem .
1. Opening question : Valid parenthesis [1]
If I ask you to solve this problem now , What kind of solution will you think of ?
That's what we're going to talk about today “ Stack ” This data structure . With this question , Let's learn today's content .
2. How to understand “ Stack ”?
About stacks , There is a very appropriate game -- Hanoi . When playing this game , We all put them one by one from bottom to top ; When I pick it up , We also take... One by one from top to bottom , You can't pull it out of the middle . First in, first out , The advanced come out later , That's typical “ Stack ” structure .
From the operational characteristics of the stack , Is a kind of the stack “ Operation is restricted ” The linear table , Insert and delete data only at one end . Definition of stack [2]
: Stack (stack) Also known as the stack , It's an operationally constrained linear table . A linear table limited to insert and delete operations only at the end of the table . This end is called the top of the stack , relatively , Call the other end the bottom of the stack . Inserting a new element into a stack is also called a push 、 Push or push , It's putting a new element on top of the top of the stack , Make it the new top element ; Removing an element from a stack is also called making a stack or backing a stack , It removes the top element of the stack , Make its adjacent elements the new top of the stack .
3. How to implement stack
From the definition of stack just now , We can see that , The stack consists of two main operations , Push and pull , That is to insert a data at the top of the stack and delete a data from the top of the stack . After understanding the definition of stack , Let's take a look at how to code a stack .
【 This article USES the swift
Language to write code , Readers, don't be afraid of difficulties because of different programming languages , What matters is thinking and logic , Language is just a way of expression . You can express your logic in your own familiar language , Try to write first 】
Talking is cheap,show you the code.
class Stack {
// Initialize array
var datas = [Int]()
// The stack,
func pop() -> Int? {
return datas.popLast()
}
// Into the stack,
func push(obj: Int) {
datas.append(obj)
}
// Stack top object
func top() -> Int? {
return datas.last
}
}
4. The application of stack in the actual development process
- Stack application in function call
func calculate() {
let a = 3
let b = 5
var result = 0
result = add(x: a, y: b)
print(result)
}
func add(x: Int, y: Int) -> Int {
var sum= 0
sum = x + y
return sum
}
We can see that from the code ,calculate() The function is called add() function , Pass in temporary variables a and b, Get calculation results , Finally print result Value .
In order to let you clearly see the function stack corresponding to this process 、 Stack operation , I drew a picture . The figure shows , In carrying out the add() Function time , Function call stack .
- recursive
In the algorithm, , One idea that is often used is recursive thinking . The famous Fibonacci sequence [3]
F(0) =0,
F(1) =1,
F(n) = F(n-1)+F(n-2)(n≥2,n∈N*)
Calculation F(n)
You need to calculate first F(n-1)
and F(n-2)
Calculation F(n-1)
You need to calculate first F(n-2)
and F(n-3)
Calculation F(n-2)
You need to calculate first F(n-2)
and F(n-3)
··· The final effect is , There will be many intermediate values pushed into the stack , That's why , When n
Very big time , It will consume a lot of memory . So in actual development , Master these underlying development foundations , It will help you choose the right technical solution .
5. Conceptual differentiation : Data structure stack VS Stack in memory
When learning the basics of computer , We know that there are stack areas and heap areas in memory . What's the difference between it and the stack in the data structure , Are they the same concept ?
Stack in memory and Data structure stack It's not a concept , It can be said that the stack in memory is the real physical area , The stack in a data structure is an abstract data storage structure .
Memory space is logically divided into three parts : Code section 、 Static data area and dynamic data area , Dynamic data area is divided into stack area and heap area .
Code section : Binary code to store method body . Advanced scheduling ( Job scheduling )、 Intermediate dispatch ( Memory scheduling )、 Low level scheduling ( Process scheduling ) Control code area to execute code switching .
Static data area : Store global variables 、 Static variables 、 Constant , Constants include final Modifier constants and String Constant . The system automatically allocates and recycles .
The stack area : Store parameters of run method 、 local variable 、 Return value . Automatically allocated and recycled by the system .
Heap area :new The reference or address of an object is stored in the stack area , Point to the real data that the object stores in the heap .
6. The beginning of the answer
Okay , I think now you have fully understood the concept of stack . Let's go back to the thinking question at the beginning , How to realize the judgment of valid brackets ? In fact, using the idea of stack can perfectly solve this problem .
We started to analyze :
- 1. If it starts with a right parenthesis
)、]、}
, Obviously illegal , Go straight back to false - 2. If it's left parenthesis
(、[、{
, Just press the stack . If it's right bracket)、]、}
, stay stack Match with the top element of the stack if there is a value , If the match passes, the element at the top of the stack will be out of the stack , Otherwise go straight back to false.
Here is swift
Problem solving implementation code
class Solution {
func isValid(_ s: String) -> Bool {
if s.count == 0 { return false }
var stack = [String]()
let dict: [String:String] = ["(":")","[":"]","{":"}"]
for c in s {
if dict.keys.contains(c.description) {
stack.append(c.description) // If it's a left bracket, put it on the stack
}else {
if stack.count > 0 && c.description == dict[stack.last!] { // If it's right bracket , And the matching is out of the stack
stack.removeLast()
}else {
return false
}
}
}
return stack.count == 0
}
}
stay LeetCode There are also solutions in many languages , Here's a python[4]
Solution method
7. Content summary
Let's review today's content . Stack is a data structure with limited operation , Only stack in and stack out operations are supported . Last in first out is its biggest feature . We also know that stack in data structure and stack in memory are not the same concept . We also understand some applications of stack in actual development , And using recursion , When n
It's worth a lot of time , A large number of temporary variables will be pressed into the stack and consume memory . And finally solve it through the core idea of stack LeetCode Classic algorithm problems in .
I believe you have really mastered the data structure of stack . Then hurry to knock the code to practice !
Reference material :
- 1. Valid parenthesis : https://leetcode-cn.com/problems/valid-parentheses
- 2. Definition of stack : https://baike.baidu.com/item/%E6%A0%88/12808149?fr=aladdin
- 3. Fibonacci sequence : https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145?fr=aladdin
- 4.python Language implementation : https://leetcode-cn.com/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/
边栏推荐
- Dark horse programmer - software testing - stage 07 2-linux and database -09-24-linux command learning steps, wildcards, absolute paths, relative paths, common commands for files and directories, file
- Practical examples of node strong cache and negotiation cache
- Win11U盘拒绝访问怎么办?Win11U盘拒绝访问的有效解决方法
- Multi table operation inner join query
- 太方便了,钉钉上就可完成代码发布审批啦!
- [ismb2022 tutorial] the picture shows the precision medicine of learning. Marinka zitnik, Harvard University, keynote speaker, with 87 ppt
- Free soldier
- Actual combat simulation │ JWT login authentication
- Lingyun going to sea | Wenhua online & Huawei cloud: creating a new solution for smart teaching in Africa
- Kotlin basic data type
猜你喜欢
Pointnet / pointnet++ point cloud data set processing and training
Neural network IOT platform construction (IOT platform construction practical tutorial)
C language - Introduction - Foundation - grammar - process control (VII)
[in-depth learning] review pytoch's 19 loss functions
[today in history] July 4: the first e-book came out; The inventor of magnetic stripe card was born; Palm computer pioneer was born
Wireshark network packet capture
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
公司要上监控,Zabbix 和 Prometheus 怎么选?这么选准没错!
c# .net mvc 使用百度Ueditor富文本框上传文件(图片,视频等)
【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt
随机推荐
应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设
In operation (i.e. included in) usage of SSRs filter
水晶光电:长安深蓝SL03的AR-HUD产品由公司供应
node强缓存和协商缓存实战示例
Win11无法将值写入注册表项如何解决?
Pointnet / pointnet++ point cloud data set processing and training
精选综述 | 用于白内障分级/分类的机器学习技术
实战模拟│JWT 登录认证
Lingyun going to sea | 10 jump &huawei cloud: jointly help Africa's inclusive financial services
Swagger suddenly went crazy
哈希(Hash)竞猜游戏系统开发功能分析及源码
[ismb2022 tutorial] the picture shows the precision medicine of learning. Marinka zitnik, Harvard University, keynote speaker, with 87 ppt
What is the application technology of neural network and Internet of things
同事的接口文档我每次看着就头大,毛病多多。。。
Multi table operation inner join query
更强的 JsonPath 兼容性及性能测试之2022版(Snack3,Fastjson2,jayway.jsonpath)
2022 Health Exhibition, health exhibition, Beijing Great Health Exhibition and health industry exhibition were held in November
What should we pay attention to when doing social media marketing? Here is the success secret of shopline sellers!
什么叫内卷?
Optimize if code with policy mode [policy mode]