20. 有效括号
今天工作很多活,只整一题简单的吧。
思路
这题能想到栈的话就很简单。先用字典吧括号对应着存储,然后每次的输入如果是同方向的括号就压入栈,不同方向就比较是不是同一类型。
# python3
class Solution:
def isValid(self, s: str) -> bool:
dic = {
'(':')',
'{':'}',
'[':']'
}
stack = list()
for n in s:
if not stack:
if n in dic.values():
return False
else:
stack.append(n)
else:
if n in dic.keys() and stack[-1] in dic.keys():
stack.append(n)
elif dic[stack[-1]] != n:
return False
else:
stack.pop()
return not stack
我觉得我写的太多if…else了。再看看大佬的,同样的思路。大佬创建字典方式和我反过来,这样就能省去很多if和else。
# python3
class Solution:
def isValid(self, s: str) -> bool:
dic = {')':'(',']':'[','}':'{'}
stack = []
for i in s:
if stack and i in dic:
if stack[-1] == dic[i]: stack.pop()
else: return False
else: stack.append(i)
return not stack
顺便复习一下链表的数据结构如何定义,虽然跟这题没什么关系。
#python3
class ListNode:
def _init_(self, x):
self.var = x
self.next = None
# 实例化节点
n1 = ListNode(4) # 节点 head
n2 = ListNode(5)
n3 = ListNode(1)
# 构建引用指向
n1.next = n2
n2.next = n3
//cpp
struct ListNode{
int var;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 实例化节点
ListNode *n1 = new ListNode(4); // 节点 head
ListNode *n2 = new ListNode(5);
ListNode *n3 = new ListNode(1);
// 构建引用指向
n1->next = n2;
n2->next = n3;