一看到括号匹配问题,我便想到了栈的先进后出原则。我希望以后你们看到各种各样的问题之后,脑袋中也能冒出一些想法,这种想法的来源是取决于你对知识点的熟悉程度,所以我们一定要把知识点记牢。
下面是我的实现代码及测试结果:
实现代码:
package practice;
import java.util.Stack;
/**
* 括号匹配问题
*/
public class Kuohaopipei {
static boolean result = true;
public static void main(String[] args) {
System.out.println("测试结果为:"+check("({.})[1]{a}([z])"));
}
/**
* 定义一个检测括号是否配对的方法
* @param str
* @return
*/
public static boolean check(String str){
//利用栈的先进后出规则
Stack<Character> stack = new Stack<>();
//将字符串转换为数组
char[] c = str.toCharArray();
for (int i = 0; i < c.length; i++) {
//判断字符是否为{[(,如果是则入栈
if ('{' == c[i] || '[' == c[i] || '(' == c[i]){
stack.push(c[i]);
}
//判断字符是否为},如果是则取栈顶元素进行匹配
peiDui(c[i],stack,'{','}');
//判断字符是否为],如果是则取栈顶元素进行匹配
peiDui(c[i],stack,'[',']');
//判断字符是否为),如果是则取栈顶元素进行匹配
peiDui(c[i],stack,'(',')');
}
return result;
}
/**
* 配对消除对应括号的方法
* @param c
* @param stack
* @param begin
* @param end
*/
public static void peiDui(char c, Stack<Character> stack, char begin, char end){
if(end == c){
//判断栈是否为空
if(!stack.isEmpty()){
if(stack.pop() != begin){
result = false;
}
}else {
result = false;
}
}
}
}
测试结果:
我个人觉得我的代码不够简洁,如果你有更好的方法可以在评论区与我交流讨论,让我们相互学习、相互成长吧!
如果你对QQ音乐的制作感兴趣可以点击:(34条消息) (优化版)简易版QQ音乐改进版(HTML+CSS+JQuery)_有没有料,进来看看就知道!-CSDN博客
制作简单,我在博客中附上了制作的详细步骤,如果有需要,也可以向我要源码,只要联系我,我就会一一回复的。
还有一个就是狂拍灰太狼的制作,这是一个小游戏,想了解可以点击:(34条消息) 每个人都能制作的简易版狂拍灰太狼小游戏(HTML+CSS+JavaScript)_有没有料,进来看看就知道!-CSDN博客