概述
一. 栈
LIFO(后进先出),其限制是仅允许在表的一端进行插入和删除运算。栈具有push()
、pop()
(返回栈顶元素并出栈)、peek()
(返回栈顶元素不出栈)、isEmpty()
等基本的方法
二. 题目:有效的括号
最开始想到的就是蛮力法,暴力分解字符串,然后从中间开始对比两个字符串,但是实现起来代码量很多
1. replace()函数
根本没想到replace()函数可以用到这道题目,只要在字符串中找到设定的字符就直接替换成空字符,最后字符串的长度就会为0。代码看起来很简单,但是运行起来的时间复杂度很大
class Solution {
public boolean isValid(String s) {
int length = s.length() / 2;
for (int i = 0; i < length; i++) {
//replace()函数可以连起来使用,也可以分开来使用
s = s.replace("()", "").replace("{}", "").replace("[]", "");
}
return s.length() == 0;
}
}
2. 栈
toCharArray( )
:将字符串对象中的字符转换为一个字符数组
栈的思想是这道题目的核心:
- 判断栈是否为空,假如空就push字符
- 没有空就比较栈顶字符和字符数组元素,假如匹配成功pop栈中字符,没匹配成功继续push字符
class Solution {
public boolean isValid(String s) {
//创建栈对象
Stack<Character> stack = new Stack<>();
//字符串转换成字符数组
char[] chars = s.toCharArray();
//数组遍历
for (char aChar : chars) {
if (stack.size() == 0) {
stack.push(aChar);
} else if (isSym(stack.peek(), aChar)) {
//stack.peek()查看栈顶元素
stack.pop();
} else {
stack.push(aChar);
}
}
return stack.size() == 0;
}
private boolean isSym(char c1, char c2) {
return (c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']') || (c1 == '{' && c2 == '}');
}
}
最后比较了一下两种方法的时间效率,栈还是占据很大优势的,虽然replace的代码量很少,使用的很灵活,但是时间效率差了一点。我只想说:栈NB!
最后
以上就是耍酷画板为你收集整理的算法题 — easy — 有效的括号一. 栈二. 题目:有效的括号的全部内容,希望文章能够帮你解决算法题 — easy — 有效的括号一. 栈二. 题目:有效的括号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复