匹配括号--Java,
匹配括号--Java,
利用自己编写的栈实现对输入字符串的括号进行匹配。"("和")", "["和"]", "{"和"}"成对出现是合法字符串。例如"[][]{}", "{[[([]([])()[])]]}"是合法的; "([(])", "[())"是不合法的.当然,还会有大小括号间嵌套的合法性约束,这里没有考虑,只是考虑了成对出现的合法性。
例:as[x{cvfd[fdg([]([fgv]v)v(g)[fgd]@#$z)!]}] --> [ ] [ ] ( ) ( ) [ ] ( ) [ ] { } [ ]
思路:将左括号存在栈中,遍历输入字符串过程中将栈顶的左括号与输入的每个字符比较是否配对,配对就输出;如果不是左右括号字符,跳过。
=============================
public boolean isMatch(String str) {
MyStack<Character> stack = new MyArrayStack<Character>();
char[] ch = str.toCharArray();
StringBuilder sb = new StringBuilder();
for(char c : ch) {
Character temp = stack.pop();
//空栈,且是左符号时只把c字符入栈
if(temp == null && isLeft(c)) { //
stack.push(c);
} else if(!isLeft(c) && !isRight(c)) { //其他字符,跳过, 并将temp入栈
stack.push(temp);
}
//若是配对,不入栈,继续下一循环
else if( '(' == temp && ')' == c ) {
sb.append(" " + temp + " ");
sb.append(c);
} else if( '[' == temp && ']' == c) {
sb.append(" " + temp + " ");
sb.append(c);
} else if( '{' == temp && '}' == c) {
sb.append(" " + temp + " ");
sb.append(c);
} else /*if (isLeft(c))*/ {
stack.push(temp);
stack.push(c);
}
}
System.out.println(sb.toString());
return stack.isEmpty();
}
private boolean isLeft(char c) {
if(c == '(' || c == '[' || c == '{')
return true;
return false;
}
private boolean isRight(char c) {
if(c == ')' || c == ']' || c == '}')
return true;
return false;
}
相关文章
- 暂无相关文章
用户点评