python需要学数据结构吗_黄哥Python提醒:没有学过数据结构和算法的不要着急刷题...

本文强调在学习编程时,尤其是面对算法题目时,不应急于求成,应先掌握基础数据结构如栈。通过LeetCode上的Valid Parentheses问题为例,解释了栈在解决括号匹配问题中的应用,并提供了Go和Java两种语言的解决方案。建议初学者在尝试刷题前先学习数据结构,以提高编程能力。
摘要由CSDN通过智能技术生成

很多人学习编程急于求成,猴急猴急的,要知道欲速则不达。

在没有学习数据结构和算法之前,不要着急刷题。不然题目看不懂,刷题写的代码通不过测试。

下面以leetcode 上这个题目为例说明这个问题。Valid Parentheses - LeetCode​leetcode.comv2-0c435ab948b151fd834be55f80a09794_180x120.jpg

这个题目需要学习了数据结构中的栈(stack) ,才能写出正确的代码。

下面是黄哥写的Go 语言代码 和Java 代码,有兴趣的朋友,可以用Python 去实现一下。

type node struct {

data interface{}

prev *node

}

// Stack 结构体

type Stack struct {

top *node

length int

}

// New 一个栈

func New() *Stack {

return &Stack{nil, 0}

}

// Pop 方法

func (stack *Stack) Pop() interface{} {

if stack.length == 0 {

return nil

}

n := stack.top

stack.top = n.prev

stack.length--

return n.data

}

func (stack *Stack) Len() interface{} {

return stack.length

}

func (stack *Stack) Push(value interface{}) {

stack.top = &node{value, stack.top}

stack.length++

}

func (stack *Stack) Peek() interface{} {

if stack.length == 0 {

return nil

}

return stack.top.data

}

// func (stack *Stack) String() string {

// return fmt.Sprintf("%v", stack.top.data)

// }

func (stack *Stack) Empty() bool {

if stack.length > 0 {

return false

}

return true

}

func isValid(str string) bool {

s := New()

openbrackets := "([{"

bracketsMap := map[string]string{

")": "(",

"]": "[",

"}": "{",

}

for _, char := range str {

fmt.Println(string(char))

if strings.Contains(openbrackets, string(char)) {

s.Push(interface{}(string(char)))

} else {

str, _ := s.Pop().(string)

if str != bracketsMap[string(char)] {

// str, _ := s.Peek().(string)

// fmt.Println(str)

return false

}

}

}

if !s.Empty() {

return false

}

return true

}

Java 代码

/*

* 黄哥所写

*/

package stackdemo;

import java.util.HashMap;

import java.util.Stack;

public class Solution {

Stack stack = new Stack<>();

HashMap map = new HashMap<>();

public Solution() {

this.map.put(')', '(');

this.map.put('}', '{');

this.map.put(']', '[');

}

public static void main(String[] args) {

String s = "()[]{}]";

System.out.println((new Solution()).isValid(s));

}

public boolean isValid(String s) {

for(int i = 0; i < s.length(); i++) {

char c = s.charAt(i);

if (c == '(' || c == '[' || c == '{') {

stack.push(c);

}else {

char top = stack.empty() ? '#' : stack.pop();

if (top != map.get(c)) {

return false;

}

}

}

return stack.isEmpty();

}

}

部分免费python免费视频

如何训练自己的编程思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值