括号匹配算法在各种编辑器中使用的非常多,其实基于栈来实现是非常简单的。代码如下:
/**
* 括号匹配
*
* @author Dongguabai
* @date 2018/9/12 17:26
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ParenthesisMatchingHelper {
public static boolean mather(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
}
Character pop = stack.pop();
if (c == ')' && pop != '(') {
return false;
}
if (c == ']' && pop != '[') {
return false;
}
if (c == '}' && pop != '{') {
return false;
}
}
}
return stack.isEmpty();
}
}
package dongguabai.training;
import java.util.Stack;
/**
* @author Dongguabai
* @Description
* @Date 创建于 2020-07-30 15:42
*/
public class C4 {
public static boolean mather(String str){
//todo 判空和长度为1
Stack<Character> stack = new Stack<>();
for (int i = 0,size = str.length(); i < size; i++) {
char c = str.charAt(i);
boolean left = c == '{' || c == '[' || c == '(';
if (left){
stack.push(c);
continue;
}
if (c == '}' || c==']' || c == ')'){
if (stack.isEmpty()){
return false;
}
Character pop = stack.pop();
if (c == '}' && pop != '{'){
return false;
}
if (c == ']' && pop != '['){
return false;
}
if (c == ')' && pop != '('){
return false;
}
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
String s = "{{({{[adad}]})}}";
System.out.println(mather(s));
}
}