括号匹配问题,括号"(){} []"转为ASCII码进行计算匹配
在我练习Java中的Stack容器时,写了括号匹配问题,相信很多小伙伴都写过这个问题,
这里呢我的思路是将括号字符转为对应的ASCII码进行匹配问题的解决,例如"("与")"的ASCII码相差为1,而"["与"]"以及"{"与"}"的ASCII码都是相差为2
我自己练习的时候也是按正常匹配思路来的,和网上的大差不差,但是我又思考了一下有没有其他方法,于是我想另辟蹊径,我把关注点放到了ASSCI码上
我很少看到有人用数值进行匹配,所以写了这一篇,设计匹配的代码可能会繁琐也有错误,发现的话欢迎指出共同进步(目前我自己测试还可以)
点击查看代码
package gaoqi300.collection.List;
import java.util.Stack;
/**
* 通过栈的后进先出,完成符号的匹配
* 字符串:"...{.....[....(....)...]....}..(....)..[...]..."
*/
public class TestStack1 {
public boolean symmetry(String str){
boolean flag = true;
Stack<String> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(c == '{'){
stack.push("{");
}
if(c == '['){
stack.push("[");
}
if(c == '('){
stack.push("(");
}
if(c == ')' || c == ']' || c == '}'){
//这样的字符直接不匹配"}}]][])"
if(stack.empty()){
flag = false;
break;
}
else{//实现括号转为ASCII码
if((int)c - (int)(stack.peek().charAt(0)) == 1 || (int)c - (int)(stack.peek().charAt(0)) == 2){
stack.pop();
}else {
break;
}
}
}
}
//如果末尾存在不匹配字符
if(!stack.empty()){
flag = false;
}
return flag;
}
public static void main(String[] args) {
TestStack1 testStack1 = new TestStack1();
System.out.println(testStack1.symmetry("[()]"));
}
}
初始的时候我采用的是
if((int)c - Integer.parseInt(stack.peek()) == 1 || (int)c - Integer.parseInt(stack.peek()) == 2){ stack.pop(); }else { break; } }
但这里会报出 异常,Integer.paeseInt() 不能将"("这样的字符串转为数值,这里也给以后的小伙伴提个醒
可以用char类型过渡一下,java的String类的charAt()方法可以将字符串的指定位置转为字符,然后int类型强制转换即可
本文来自博客园,作者:戏幕起,转载请注明原文链接:https://www.cnblogs.com/Rainy-day-with-you/p/16562633.html