刷题记录:堆栈思想解决符号匹配问题

问题:这是符号相匹配的,如果是 abc] 那就是不匹配的。给具有符号和数字组成的字符串"12"判断是否匹配。

例如:12
分析:<必须和最近的>进行匹配,[ 也必须和最近的 ] 进行匹配。我们分析在栈中的数据:遇到匹配正确的就消除。
算法原理:
栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空
解题思路:
1.判断所给字符串的字符元素c,如果为左括号则push()
2.如果为c右括号则pop(),让堆栈的栈顶与c判断是否匹配,否则直接返回false
边界问题:
边界问题出现在前面括号匹配并出栈,此时来了一个右括号,因此在进行栈顶与右括号匹配判断之前,需要加上stack.isEmpty()的判断
代码:

public boolean isValid(String s) {
		Stack<Character> sta =new Stack();
		char[] ch=s.toCharArray();
		for(char c:ch) {
			switch(c){
				case '<':
				case '[':
				case '{':
					sta.push(c);
					break;
				case '>':
				case '}':
				case ']':
					if(!sta.isEmpty()){
		                char chr = sta.pop();
		                if(c=='}' && chr != '{'
		                    || c==']' && chr != '['
		                    || c==')' && chr != '('){
		                    return false;
		                }
		            }
		            break;
				default:break;
			}
		}
		return sta.isEmpty();
		
	}

你可能感兴趣的:(刷题记录:堆栈思想解决符号匹配问题)