给定一个只包括'(,')’. '[,'',’[',']’ 的字符串s,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
代码:
import java.util.Scanner;
import java.util.Stack;
public class Homework {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串:");
boolean sense = sense(scanner.next());//调用sense()方法
System.out.println(sense);
}
public static boolean sense(String string) {
Stack<Character> stack = new Stack<Character>();//定义一个栈
//将字符串转成char数组,增强型for循环遍历数组
for(char c: string.toCharArray()){
//将数组取出的符号与它所对应的右括号比较,如果右括号存在则入栈,
// 如果出现的是右括号,不入栈,判断与它本次出站的元素是否一致,一致继续,不一致返回false
//stack.push 把值放入到栈的最顶部
if(c=='('){
stack.push(')');
}else if(c=='['){
stack.push(']');
}else if(c=='{'){
stack.push('}');
}else if(stack.isEmpty()||c!=stack.pop()){
//stack.pop()取栈中最顶部的值
return false;
}
}
return stack.isEmpty();
}
}
运行结果: