给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
解题思路:首先将输入的字符串存放到数组中,如果字符的个数为奇数则一定不匹配;定义一个栈并将字符压栈,判断栈顶元素是否为三种闭括号的其中一种,如果是则弹出栈顶元素并将其放入另一个数组,再判断栈顶元素是否和数组中闭括号匹配,若匹配则继续,若不匹配返回false; 将所有的符号压入并弹出时返回true.
import java.util.Scanner;
import java.util.Stack;
public class Test {
//给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
Test t = new Test();
System.out.println(t.isValid(s));
}
public boolean isValid(String s) {
char[] arr = s.toCharArray();
if(arr.length%2!=0) return false;
char[] a= new char [2];
Stack stack = new Stack();
for(int i=0;i<s.length();i++){
stack.push(arr[i]);
if(stack.peek().equals(')')|| stack.peek().equals(']')|| stack.peek().equals('}'))
{
a[0]=(char) stack.pop();
if(!stack.empty()){
a[1]=(char) stack.pop();
if(a[0]==')'&&a[1]!='(' || a[0]==']'&&a[1]!='[' || a[0]=='}'&&a[1]!='{') return false;
}
}
}
if(stack.empty()) return true;
return false;
}
}