抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

文章已收录Github精选,欢迎Starhttps://github.com/yehongzhi

前言

很多人做leetcode题目找不到方向,或者说很难持之以恒,我这里推荐一种方法,从简单难度开始刷,刷完这个标签的简单难度,再换一个标签,这样循序渐进,把做题的量慢慢提高,还有难度逐渐加大。对于初学者,最重要是趁热打铁,而不是东打一枪西放一炮,趁热打铁才能形成做题的思路

还有一个问题是,一开始做题往往我们没有思路,只会想到暴力解法,效率只有惨淡的5%,遇到这种情况是很正常的,因为还没开始形成解题的思维。我们可以先看看题解,看完思路再自己写,千万不要照抄,要自己想出来才能锻炼编程能力。

所谓talking is cheap, show me code,那么我们就从字符串开始吧!

20. 有效的括号

题目

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。

解题思路

这道题可以应用于校验JSON格式的括号是否正确。从题目上可以知道有效的括号是有左括号,也会有相同类型的右括号,并且按照正确的顺序闭合。

那么应该采取什么方法校验呢?我马上想到的是通过成对成对地删除有效的括号,从最里面一直往外层删除,最后能删除完,变成空字符串就代表是有效括号返回true,否则返回false。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public boolean isValid(String s) {
if (s == null) {
return false;
}
if ("".equals(s)) {
return true;
}
//去掉空格字符
s = s.replace(" ", "");
//如果是长度是奇数,直接返回false
if (s.length() % 2 != 0) {
return false;
}
//如果长度等于0表示是有效的括号,返回true,否则返回false
return dealString(s) == 0;
}

private int dealString(String s) {
if (s.length() == 0) {
return 0;
}
for (int i = 0; i < s.length() - 1; i++) {
//获取相邻的两个字符
String str = String.valueOf(s.charAt(i)) + s.charAt(i + 1);
if ("{}".equals(str) || "[]".equals(str) || "()".equals(str)) {
//如果是有效的括号就删除
i