很多人学习编程急于求成,猴急猴急的,要知道欲速则不达。
在没有学习数据结构和算法之前,不要着急刷题。不然题目看不懂,刷题写的代码通不过测试。
下面以leetcode 上这个题目为例说明这个问题。Valid Parentheses - LeetCodeleetcode.com
这个题目需要学习了数据结构中的栈(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免费视频
如何训练自己的编程思路