java 符号匹配的四种方法


import java.util.HashMap;
import java.util.Stack;

public class match {
	public boolean match1(String s) {

		if (s.contains("()") || s.contains("[]") || s.contains("{}")) {
			s = s.replace("()", "");
			s = s.replace("[]", "");
			s = s.replace("{}", "");
			return s.length() == 0;
		} else {
			return false;
		}
	}

	public boolean match2(String s) {
		Stack<Character> stack = new Stack<Character>();
		char[] arr = s.toCharArray();
		for (char c : arr) {
			if (c == '(') {
				stack.push(')');
			} else if (c == '[') {
				stack.push(']');
			} else if (c == '{') {
				stack.push('}');
			} else {
				if (stack.isEmpty() || stack.pop() != c) {
					return false;
				}

			}
		}
		return stack.isEmpty();

	}
	public boolean match3(String s) {
		Stack<Character> stack = new Stack<Character>();
		HashMap<Character, Character> map = new HashMap<Character, Character>();
		map.put('(', ')');
		map.put('[', ']');
		map.put('{', '}');
		
		for(int i=0;i<s.length();i++){
			char ch = s.charAt(i);
			if(map.containsKey(ch)) {
				stack.push(ch);
			}
			else {
				if(stack.isEmpty() ) {
					return false;
				}
				else {
					char ele = stack.pop();
					if(ch!=map.get(ele) ) {
						return false;
					}
				}
			}
		}
		return stack.isEmpty();
	}
public boolean match4(String s) {
	Stack<Character> stack = new Stack<Character>();
	for(int i=0;i<s.length();i++){
		char ch = s.charAt(i);
		if(ch=='('||ch=='['||ch=='{') {
			stack.push(ch);
		}
		else {
			if(stack.isEmpty() ) {
				return false;
			}
			else {
				char ele = stack.pop();
				if(ele=='('&&ch!=')' || ele=='['&&ch!=']' || ele=='{'&&ch!='}') {
					return false;
				}
			}
		}
	}
	return stack.isEmpty();
}
	public static void main(String[] args) {
		match test = new match();
		String s = "{[()]}";
		System.out.println(test.match1(s));
		System.out.println(test.match2(s));
		System.out.println(test.match3(s));
                System.out.println(test.match4(s));
	}

}

提示:

1,match3是match4的升级版,看起来更高大上一点有么有😄
2,char 类型时用' '单引号
3,match1--暴力破解法    match2--字符串转化为char数组+for each 方法
+stack push相反符号的方法
match3 -- hashmap存储左右符号为key,value,使用map.containsKey()方法
进行stack  push+map.get()方法做相反符号的判断。
match4 --match3的降级版
posted @ 2020-10-26 23:20  nmydt  阅读(279)  评论(0编辑  收藏  举报