不操千曲而后晓声,观千剑而后识器。这篇文章主要讲述Leetcode 20有效的括号(附JAVA Deque 和LinkedList用法)相关的知识,希望能为你提供帮助。
方法一:利用栈
思路:(1)创建一个栈,在栈里依次加入字符串的括号,如果遇到的是右括号,那么将左括号入栈,如果是右括号,则将出栈一个元素,判断出栈元素,是不是刚好是当前即将入栈的匹配右元素
python版本
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
# The stack to keep track of opening brackets.
stack = []
# Hash map for keeping track of mappings. This keeps the code very clean.
# Also makes adding more types of parenthesis easier
mapping = ")": "(", "": "", "]": "["
# For every bracket in the expression.
for char in s:
# If the character is an closing bracket
if char in mapping:
# Pop the topmost element from the stack, if it is non empty
# Otherwise assign a dummy value of # to the top_element variable
top_element = stack.pop() if stack else #
# The mapping for the opening bracket in our hash and the top
# element of the stack dont match, return False
if mapping[char] != top_element:
return False
else:
# We have an opening bracket, simply push it onto the stack.
stack.append(char)
# In the end, if the stack is empty, then we have a valid expression.
# The stack wont be empty for cases like ((()
return not stack
java版本
class Solution
public boolean isValid(String s)
int n = s.length();
if (n % 2 == 1)
return false;
Map<
Character, Character>
pairs = new HashMap<
Character, Character>
()
put(), ();
put(], [);
put(, );
;
Deque<
Character>
stack = new LinkedList<
Character>
();
for (int i = 0;
i <
n;
i++)
char ch = s.charAt(i);
if (pairs.containsKey(ch))
if (stack.isEmpty() || stack.peek() != pairs.get(ch))
return false;
stack.pop();
else
stack.push(ch);
return stack.isEmpty();
如果括号只有??()?
?样式,那么判断有效的括号可以用下面的方式
def vaild(input_str):
tmp = []
for i in input_str:
if i == ")" and tmp[-1] == "(":
print(tmp[-1])
tmp.pop()
else:
tmp.append(i)
if tmp == []:
return True
else:
return False
print(vaild("(()())"))
扩展,关于Java的双端队列Deque和LinkedList相关知识
一个是peek和pop的用法
???peek()?
?? 返回队头元素,但不删除该元素。
???pop()?
? 返回队头元素,并删除该元素。
示例代码如下
import java.util.LinkedList;
class LinkedListPopDemo
public static void main(String[] args)
// Create a LinkedList of Strings
LinkedList<
String>
list = new LinkedList<
String>
();
// Add few Elements
list.add("Jack");
list.add("Robert");
list.add("Chaitanya");
list.add("kate");
// Display LinkList elements
System.out.println("LinkedList before: "+list);
// pop Element from list and display it
System.out.println("Element removed: "+list.pop());
// Display after pop operation
System.out.println("LinkedList after: "+list);
LinkedList before: [Jack, Robert, Chaitanya, kate]
Element removed: Jack
LinkedList after: [Robert, Chaitanya, kate]
总结一下:
当我们只需要取出栈顶的元素进行处理(或者说我们需要先对栈顶的数据进行处理例如比较)然后根据处理的结果进行决定是否要pop(),这种情况下,我们可以先使用peek()方法,取出栈顶的值。
补充总结一下栈中的其他常用的方法:
empty( )——如果堆栈是空的,则返回true,当堆栈包含元素时,返回false;
一个是add和push的用法区别
Java LinkedList add 是加在list尾部,LinkedList push 施加在list头部,等同于addFirst
【Leetcode 20有效的括号(附JAVA Deque 和LinkedList用法)】示例代码1
import java.util.LinkedList;
class LinkedListExample
public static void main(String[] args)
// Create a LinkedList of Strings
LinkedList<
String>
list = new LinkedList<
String>
();
// Add few Elements
list.add("Jack");
list.add("Robert");
list.add("Chaitanya");
list.add("kate");
// Display LinkList elements
System.out.println("LinkedList contains: "+list);
// push Element the list
list.push("NEW ELEMENT");
// Display after push operation
System.out.println(
推荐阅读
- Go Web 编程入门(验证器)
- Leetcode 38报数
- pythonnohup python 提示 ImportError: No module named requests
- #夏日挑战赛# FFH从零开始的鸿蒙机器学习之旅-NLP情感分析
- linux搭建redis
- 快速了解常用的对称加密算法,再也不用担心面试官的刨根问底
- 机器学习总结笔记
- #云原生征文#深入了解Kubernetes(k8s)Service
- python打印print打印语句当中的f是什么