J'ai essayé LeetCode tous les jours 20. Parenthèses valides (Python, Go)

introduction

@Ishishow gère un site de mots anglais gratuit E-tan.

J'aimerais travailler quotidiennement sur letcode pour améliorer mes capacités de programmeur et donner ma propre façon de le résoudre.

Qu'est-ce que Leetcode

leetcode.com C'est la pratique de coder des interviews pour les développeurs de logiciels. Au total, plus de 1 500 questions de codage ont été affichées, et il semble que les mêmes questions soient souvent posées lors d'entretiens réels.

Introduction au langage Go + Algorithme Je vais le résoudre avec Golang et Python pour renforcer mon cerveau. (Python est faible mais expérimenté)

6ème question (problème 20)

  1. Valid Parentheses

Considérez qu'une chaîne s contient uniquement des caractères '(', ')', '{', '}', `` ['' et ']', entrée Déterminez si la chaîne est valide.

La chaîne d'entrée est valide dans les cas suivants:

  1. Les supports ouverts doivent être fermés avec le même type de support.
  2. Les crochets ouverts doivent être fermés dans le bon ordre.

Example 1:

  Input: s = "()"
  Output: true

Example 2:

  Input: s = "()[]{}"
  Output: true

Example 3:

  Input: s = "(]"
  Output: false

Example 4:

  Input: s = "([)]"
  Output: false

Example 5:

  Input: s = "{[]}"
  Output: true

Façon de penser

  1. Préparez un tableau de pile et un dictionnaire (carte).
  2. Entrez le symbole correspondant sur la carte
  3. Regardez la chaîne caractère par caractère, ajoutez-la à la pile si elle commence par une parenthèse, et si c'est une parenthèse fermante, retirez la dernière de la pile et vérifiez si elle correspond.

Explication

  1. Définissez pile et dict (carte).
  2. dict = {"]":"[", "}":"{", ")":"("}
  3. Regardez les caractères un par un avec l'instruction for.

--Code de réponse

class Solution:
	def isValid(self, s):
		stack = []
		dict = {"]":"[", "}":"{", ")":"("}
		for char in s:
			if char in dict.values():
				stack.append(char)
			elif char in dict.keys():
				if stack == [] or dict[char] != stack.pop():
					return False
			else:
				return False
		return stack == []


If char in dict.values (): s'il commence par des parenthèses

Elif char in dict.keys (): s'il se termine entre parenthèses

Obtenez les derniers personnages de la pile avec pop

Attribuer à empiler avec append.

  func isValid(s string) bool {
  	stack := make([]rune, 0)
  	m := map[rune]rune{
  		')': '(',
  		']': '[',
  		'}': '{',
  	}
  	for _, c := range s {
  		switch c {
  		case '(', '{', '[':
  			stack = append(stack, c)
  		case ')', '}', ']':
  			if len(stack) == 0 || stack[len(stack)-1] != m[c] {
  				return false
  			}
  			stack = stack[:len(stack)-1]
  		}
  	}
  
  	return len(stack) == 0
  }

Ce code est un peu délicat, mais j'ai ce code pour voir les chaînes caractère par caractère dans Go.

Pour _, c: = range, le traitement en boucle lit les chaînes de caractères caractère par caractère. À ce moment-là, c devient le type de rune, donc la carte et la pile sont également définies avec le type de rune.

Depuis que j'écris Golang, j'ai écrit le processus avec la déclaration switich.

-Self memo (Go)

Si vous regardez la chaîne de caractères caractère par caractère, rune

Ajouter à la tranche (ok car ce n'est pas une longueur fixe)

Recommended Posts

J'ai essayé LeetCode tous les jours 20. Parenthèses valides (Python, Go)
J'ai essayé LeetCode tous les jours 9. Palindrome Number (Python, Go)
J'ai essayé LeetCode tous les jours 1. Two Sum (Python, Go)
J'ai essayé LeetCode tous les jours 14.Le plus long préfixe commun (Python, Go)
J'ai essayé LeetCode tous les jours 26. Supprimer les doublons du tableau trié (Python, Go)
J'ai essayé Grumpy (allez exécuter Python).
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé Python> décorateur
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé l'extension C de Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé de toucher Python (installation)
J'ai essayé webScraping avec python.
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la notification de ligne en Python
J'ai essayé la communication SMTP avec Python
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter PPO en Python
Python: j'ai essayé le problème du voyageur de commerce
Livre Wrangle x Python Je l'ai essayé [1]
Mayungo's Python Learning Episode 8: J'ai essayé l'entrée
[Python] J'ai essayé de calculer TF-IDF régulièrement
J'ai essayé de gratter la météo Yahoo (édition Python)
J'ai essayé de toucher Python (syntaxe de base)
J'ai essayé le framework de test Python Tornado
# J'ai essayé quelque chose comme Vlookup avec Python # 2
[EN DIRECT] J'ai essayé de fournir les heures de lever et de coucher du soleil dans tout le pays chaque jour
Python Jour 1
[Baseball Hack] J'ai essayé de copier le script d'acquisition de données de score et de note Python MLB avec Go en une demi-journée
Soit Code Day58 à partir de zéro "20. Parenthèses valides"