♥♥♥♥♥个人主页♥♥♥♥♥
♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥
文件目录
前言
在学习数据结构的过程中遇到了各种各样类型的题目,我在解答这些题目的时候收获了不少,所以我想开设一个专栏来分享我平时做题的收获,在我分享的题中我采用三步法来阐述,希望大家可以在我的文章有收获,并且能够在评论区中积极讨论更多的解题方法。
1.括号匹配
1.1问题描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号
1.2解题思路
大主题:我们先遍历这个字符串,在遇到左括号就进行压栈,遇到右括号则出栈并与左括号匹配,在这会出现两种情况:
1.如果不匹配,则直接返回false。
2.如果匹配,则可以继续去遍历这个字符串。
特殊情况:
1.当遍历完字符串,发现栈中还有元素,则可以直接返回false。
2.当栈中的元素已经全部被弹出,发现字符串没有被遍历完,也直接返回false。
1.3画图解释
1.大主题:
2.特殊情况:
1.4代码实现
public class ParenMatch {
Stack<Character> stack = new Stack<>();
public boolean isValid(String str) {
//1.遍历这个数组
for (int i = 0; i < str.length(); i++) {
//2.判断是左括号还是右括号
char ch = str.charAt(i);
//2.1左括号
if(ch == '(' || ch == '[' || ch == '{' ) {
//压栈
stack.push(ch);
}
//2.2右括号 看栈中是否为空,为空直接返回flase 不为空判断左右括号是否匹配。
else {
//2.2.1栈中不为空
if(!stack.empty()) {
char ch1 = stack.peek();//ch1是左括号。
//判断括号是否匹配
if(ch == ')' && ch1 == '(' || ch == ']' && ch1 == '[' || ch == '}' && ch1 == '{') {
stack.pop();
}
else {
return false;
}
}
//2.2.2栈中为空
else {
return false;
}
}
}
//当数组遍历完之后,判断栈中是否空。
return stack.empty();
}
pu